In MariaDB ist das LIKE
-Operator ermöglicht Ihnen den Musterabgleich. Es bestimmt, ob eine bestimmte Zeichenfolge mit einem bestimmten Muster übereinstimmt. Es gibt entweder 1
zurück (WAHR) oder 0
(FALSCH).
Ein Muster kann reguläre Zeichen sowie den %
enthalten und _
Platzhalterzeichen.
Diese Platzhalterzeichen werden in der folgenden Tabelle erläutert.
Platzhalterzeichen | Beschreibung |
---|---|
% | Entspricht einer beliebigen Zeichenfolge mit null oder mehr Zeichen. Es kann entweder als Präfix oder Suffix verwendet werden, und es kann auch in der Mitte einer Zeichenfolge verwendet werden. |
_ | Entspricht jedem einzelnen Zeichen. |
Syntax
Die Syntax lautet wie folgt:
expr LIKE pat [ESCAPE 'escape_char']
Beispiel
Angenommen, wir haben die folgende Tabelle:
SELECT * FROM Pets;
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Hier ist ein Beispiel, um zu demonstrieren, wie der LIKE
Betreiber funktioniert.
SELECT *
FROM Pets
WHERE PetName LIKE 'F%';
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
In diesem Beispiel habe ich den LIKE
verwendet Operator in Verbindung mit dem %
Wildcard-Operator, um Haustiere zurückzugeben, deren Name mit dem Buchstaben F
beginnt .
Groß-/Kleinschreibung
LIKE
führt Groß-/Kleinschreibungsübereinstimmungen durch, wenn die Sortierung für den Ausdruck und das Muster Groß-/Kleinschreibung nicht berücksichtigt.
Daher können wir das vorherige Beispiel ändern, um einen Kleinbuchstaben f
zu verwenden , und erhalten immer noch das gleiche Ergebnis:
SELECT *
FROM Pets
WHERE PetName LIKE 'f%';
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Wir können jedoch eine Übereinstimmung zwischen Groß- und Kleinschreibung erzwingen, indem wir COLLATE
verwenden Klausel mit einer binären Sortierung. Alternativ können Sie CAST()
verwenden um es in einen binären String zu zwingen.
Beispiel:
SELECT *
FROM Pets
WHERE PetName LIKE 'f%' COLLATE utf8_bin;
Ergebnis:
Empty set (0.000 sec)
Es werden keine Ergebnisse zurückgegeben.
Aber wenn wir es in einen großen F
ändern :
SELECT *
FROM Pets
WHERE PetName LIKE 'F%' COLLATE utf8_bin;
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Wie erwartet bekommen wir drei Übereinstimmungen.
Numerische Argumente
Numerische Argumente werden in binäre Zeichenfolgen umgewandelt.
SELECT *
FROM Pets
WHERE PetId LIKE 7;
Ergebnis:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | +-------+-----------+---------+---------+------+
Termine
Hier ist ein Beispiel, das das Jahr aus einem Datum abgleicht:
SELECT *
FROM Pets
WHERE DOB LIKE '2020%';
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +-------+-----------+---------+---------+------------+
Sie können auch den LIKE
verwenden Operator gegen das Ergebnis von Datumsfunktionen wie DAYNAME()
, MONTHNAME()
usw.
SELECT *
FROM Pets
WHERE MONTHNAME(DOB) LIKE 'Nov%';
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +-------+-----------+---------+---------+------------+
Der _
Wildcard-Operator
Der Unterstrich (_
) Wildcard-Operator passt auf jedes einzelne Zeichen.
Beispiel:
SELECT *
FROM Pets
WHERE PetName LIKE '_e%';
Ergebnis:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 2 | 3 | 3 | Fetch | 2019-08-16 | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
In diesem Fall haben wir Tiernamen abgeglichen, bei denen das zweite Zeichen ein e
ist .
Der Escape-Charakter
Manchmal kann es vorkommen, dass Sie nach einem Unterstrich oder einem Prozentzeichen suchen müssen. In solchen Fällen können Sie einen umgekehrten Schrägstrich verwenden (\
), um diesen Zeichen zu entkommen. Dadurch wird verhindert, dass sie als Platzhalterzeichen interpretiert werden.
Angenommen, wir haben die folgende Tabelle:
SELECT * FROM Owners;
Ergebnis:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +---------+-----------+----------+----------------+--------------------+
Beachten Sie, dass Besitzer 2 (Bart) eine E-Mail-Adresse hat, die einen Unterstrich enthält.
Hier ist ein Beispiel dafür, was passiert, wenn wir es nicht tun Entkommen Sie einem Unterstrich:
SELECT * FROM Owners
WHERE Email LIKE 'b_%';
Ergebnis:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +---------+-----------+----------+----------------+--------------------+
In diesem Fall stimmte es mit zwei Zeilen überein. In diesem Fall spielte es keine Rolle, was das zweite Zeichen war – es passte zu beliebigen Charakter. Die Tatsache, dass die erste Zeile einen Unterstrich für das zweite Zeichen enthält, ist nur ein Zufall. Es hätte gepasst, auch wenn es etwas anderes gewesen wäre.
Aber was wäre, wenn wir nur die E-Mail-Adressen abgleichen wollten, die einen echten Unterstrich als zweites Zeichen haben?
Hier kommt das Escape-Zeichen ins Spiel.
SELECT * FROM Owners
WHERE Email LIKE 'b\_%';
Ergebnis:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | +---------+-----------+----------+----------------+--------------------+
Jetzt erhalten wir nur noch eine Zeile – die Zeile, die den Unterstrich als zweites Zeichen enthält.
Escape-Zeichen ändern
Es ist möglich, das Escape-Zeichen zu ändern. Das geht mit dem ESCAPE
Argument.
Beispiel:
SELECT * FROM Owners
WHERE Email LIKE 'b*_%' ESCAPE '*';
Ergebnis:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | +---------+-----------+----------+----------------+--------------------+
In diesem Fall habe ich den Stern (*
) als Fluchtzeichen.
Dies kann besonders praktisch sein, wenn Sie den umgekehrten Schrägstrich für andere Zwecke verwenden müssen, z. B. zum Codieren von Sonderzeichen. In solchen Fällen kann es vorkommen, dass Sie diese Zeichen „doppelt maskieren“ müssen, was verwirrend werden kann. Das Ändern des Escape-Zeichens kann daher in solchen Situationen helfen.
NULL-Werte
Der Prozentsatz (%
) Wildcard stimmt mit allem überein – fast. Eine Sache, die nicht übereinstimmt, ist NULL
.
SELECT * FROM Owners
WHERE Email LIKE '%';
Ergebnis:
+---------+-----------+----------+----------------+--------------------+ | OwnerId | FirstName | LastName | Phone | Email | +---------+-----------+----------+----------------+--------------------+ | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +---------+-----------+----------+----------------+--------------------+
In unserer Tabelle gibt es zwei Zeilen mit NULL
in der Email
Spalte, aber diese werden hier nicht zurückgegeben.
Leistung
Abfragen, die den LIKE
enthalten -Operator kann viel langsamer als andere Abfragen ausgeführt werden, und Sie sollten wahrscheinlich die Verwendung von LIKE
vermeiden Betreiber, es sei denn, Sie brauchen ihn wirklich. Verwenden Sie den %
Operator als Präfix kann besonders langsam sein.
Das heißt nicht, dass Sie es überhaupt nicht verwenden sollten. Das LIKE
Operator ist ein integraler Bestandteil von SQL, und Sie werden auf viele Szenarien stoßen, in denen dies die einzige Option (oder zumindest die beste Option) sein wird.
Das NOT LIKE
Betreiber
Sie können auch NOT LIKE
verwenden um zu testen, ob ein String nicht funktioniert einem Muster entsprechen.