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
patexpr NOT RLIKE
pat
Dies ist das Gleiche wie NOT
(.
expr REGEXP
pat)
expr REGEXP
patexpr 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.
