Wenn einer String-Funktion ein Binär-String als Argument übergeben wird, ist der Ergebnis-String ebenfalls ein Binär-String. Eine Zahl, die in einen String konvertiert wird, wird als Binär-String behandelt. Dies betrifft nur Vergleiche.
Wenn ein Ausdruck in einem String-Vergleich die Groß-/Kleinschreibung unterscheidet, dann wird der Vergleich ebenfalls mit Unterscheidung der Groß-/Kleinschreibung durchgeführt.
expr
LIKE
pat
[ESCAPE
'escape_char
']
Mustervergleich unter Verwendung eines einfachen
SQL-Vergleichs mit regulären Ausdrücken. Gibt
1
(TRUE
) oder
0
(FALSE
) zurück.
Wenn entweder expr
oder
pat
NULL
sind,
ist das Ergebnis NULL
.
Das Muster muss kein literaler String sein. Es kann beispielsweise auch als String-Ausdruck oder als Tabellenspalte angegeben werden.
Gemäß dem SQL-Standard führt LIKE
die
Überprüfung auf Zeichenbasis durch, kann also Ergebnisse
erzeugen, die sich von denen des Vergleichsoperators
=
unterscheiden:
mysql>SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+ | 'ä' LIKE 'ae' COLLATE latin1_german2_ci | +-----------------------------------------+ | 0 | +-----------------------------------------+ mysql>SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+ | 'ä' = 'ae' COLLATE latin1_german2_ci | +--------------------------------------+ | 1 | +--------------------------------------+
Bei LIKE
können Sie die folgenden beiden
Jokerzeichen im Muster verwenden:
Zeichen | Beschreibung |
% |
entspricht einer beliebigen Anzahl von Zeichen (einschließlich null Zeichen). |
_ |
entspricht genau einem Zeichen. |
mysql>SELECT 'David!' LIKE 'David_';
-> 1 mysql>SELECT 'David!' LIKE '%D%v%';
-> 1
Um auf literale Instanzen eines Jokerzeichens zu prüfen,
stellen Sie ihm ein Escape-Zeichen voran. Wenn Sie das
Escape-Zeichen nicht angeben, wird
‘\
’ angenommen.
String | Beschreibung |
\% |
entspricht einem ‘% ’-Zeichen. |
\_ |
entspricht einem ‘_ ’-Zeichen. |
mysql>SELECT 'David!' LIKE 'David\_';
-> 0 mysql>SELECT 'David_' LIKE 'David\_';
-> 1
Um ein anderes Escape-Zeichen anzugeben, verwenden Sie die
ESCAPE
-Klausel:
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
Die Escape-Sequenz sollte leer oder genau ein Zeichen lang
sein. Ab MySQL 5.1.2 darf die Sequenz nicht leer sein, wenn
der SQL-Modus NO_BACKSLASH_ESCAPES
aktiviert wurde.
Die folgenden beiden Anweisungen veranschaulichen, dass die Groß-/Kleinschreibung bei String-Vergleichen nicht unterschieden wird, sofern nicht einer der Operanden ein Binär-String ist:
mysql>SELECT 'abc' LIKE 'ABC';
-> 1 mysql>SELECT 'abc' LIKE BINARY 'ABC';
-> 0
In MySQL ist LIKE
für numerische
Ausdrücke zulässig. (Dies stellt eine Erweiterung zu
LIKE
nach SQL-Standard dar.)
mysql> SELECT 10 LIKE '1%';
-> 1
Hinweis: Weil MySQL die
C-Escape-Syntax in Strings verwendet (z. B.
‘\n
’ zur Darstellung eines
Zeilenwechsels), müssen Sie jedes
‘\
’, das Sie in
LIKE
-Strings verwenden, verdoppeln. Um
beispielsweise nach ‘\n
’ zu
suchen, geben Sie es als
‘\\n
’ an. Um nach
‘\
’ zu suchen, geben Sie es
als ‘\\\\
’ an; dies ist
erforderlich, weil Backslashs einmal vom Parser und dann
noch einmal bei Durchführung des Mustervergleichs
umgewandelt werden – so bleibt für den Vergleich ein
einzelner Backslash übrig.
expr
NOT LIKE
pat
[ESCAPE
'escape_char
']
Dies ist das Gleiche wie NOT
(
.
expr
LIKE
pat
[ESCAPE
'escape_char
'])
,
expr
NOT REGEXP
pat
expr
NOT RLIKE
pat
Dies ist das Gleiche wie NOT
(
.
expr
REGEXP
pat
)
expr
REGEXP
pat
expr
RLIKE
pat
Führt einen Mustervergleich eines String-Ausdrucks
expr
mit einem Muster
pat
durch. Das Muster kann ein
erweiterter regulärer Ausdruck sein. Die Syntax für
reguläre Ausdrücke wird in Anhang G, Beschreibung der MySQL-Syntax für reguläre Ausdrücke,
beschrieben. Gibt 1
zurück, wenn
expr
mit
pat
übereinstimmt; andernfalls
wird 0
zurückgegeben. Wenn entweder
expr
oder
pat
NULL
sind,
ist das Ergebnis auch NULL
.
RLIKE
ist ein Synonym für
REGEXP
, welches aus Gründen der
mSQL
-Kompatibilität vorhanden ist.
Das Muster muss kein literaler String sein. Es kann beispielsweise auch als String-Ausdruck oder als Tabellenspalte angegeben werden.
Hinweis: Weil MySQL die
C-Escape-Syntax in Strings verwendet (z. B.
‘\n
’ zur Darstellung eines
Zeilenwechsels), müssen Sie jedes
‘\
’, das Sie in
REGEXP
-Strings verwenden, verdoppeln.
REGEXP
unterscheidet die
Groß-/Kleinschreibung nur dann, wenn sie mit Binär-Strings
verwendet wird.
mysql>SELECT 'Monty!' REGEXP 'm%y%%';
-> 0 mysql>SELECT 'Monty!' REGEXP '.*';
-> 1 mysql>SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1 mysql>SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
-> 1 0 mysql>SELECT 'a' REGEXP '^[a-d]';
-> 1
REGEXP
und RLIKE
verwenden zur Erkennung des Typs eines Zeichens den
aktuellen Zeichensatz. Der Standardzeichensatz ist
latin1
(cp1252 West European).
Warnung: Diese Operatoren
sind nicht multibytesicher.
STRCMP()
gibt 0
zurück, wenn die Strings identisch sind,
-1
, wenn das erste Argument entsprechend
der aktuellen Sortierreihenfolge kleiner ist als das zweite,
und 1
in jedem anderen Fall.
mysql>SELECT STRCMP('text', 'text2');
-> -1 mysql>SELECT STRCMP('text2', 'text');
-> 1 mysql>SELECT STRCMP('text', 'text');
-> 0
STRCMP()
verwendet zur Durchführung von
Vergleichsoperationen den aktuellen Zeichensatz. Insofern
wird die Groß-/Kleinschreibung bei Vergleichen
standardmäßig nicht unterschieden, sofern nicht mindestens
einer der Operanden ein Binär-String ist.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.