W MySQL, LIKE
operator wykonuje dopasowanie wzorca przy użyciu wzorca SQL.
Jeśli ciąg pasuje do podanego wzorca, wynikiem jest 1
, w przeciwnym razie jest to 0
.
Wzorzec niekoniecznie musi być dosłownym ciągiem. Ta funkcja może być używana z wyrażeniami łańcuchowymi i kolumnami tabeli.
Składnia
Składnia wygląda tak:
expr LIKE pat [ESCAPE 'escape_char']
Gdzie expr
jest ciągiem wejściowym i pat
to wzorzec, dla którego testujesz ciąg.
Opcjonalny ESCAPE
klauzula umożliwia określenie znaku ucieczki. Domyślny znak ucieczki to \
, więc możesz pominąć tę klauzulę, jeśli nie musisz tego zmieniać.
Przykład 1 – Podstawowe użycie
Oto przykład użycia tego operatora w SELECT
oświadczenie:
SELECT 'Charlie' LIKE 'Char%';
Wynik:
+------------------------+ | 'Charlie' LIKE 'Char%' | +------------------------+ | 1 | +------------------------+
W tym przypadku zwracana wartość to 1
co oznacza, że ciąg wejściowy pasował do wzorca. W szczególności określiliśmy, że ciąg wejściowy powinien zaczynać się od Char i skończ na czymkolwiek. %
znak pasuje do dowolnej liczby znaków (w tym znaków zero).
Oto, co się stanie, jeśli opuścimy %
:
SELECT 'Charlie' LIKE 'Char';
Wynik:
+-----------------------+ | 'Charlie' LIKE 'Char' | +-----------------------+ | 0 | +-----------------------+
Zwracany wynik to 0
co oznacza brak dopasowania. Dzieje się tak, ponieważ nie użyliśmy znaku wieloznacznego do określenia innych znaków.
Przykład 2 – _
Symbol wieloznaczny
Mamy również możliwość skorzystania z _
symbol wieloznaczny, aby określić tylko jeden znak. Oto przykład:
SELECT 'Charlie' LIKE 'Ch_rlie';
Wynik:
+--------------------------+ | 'Charlie' LIKE 'Ch_rlie' | +--------------------------+ | 1 | +--------------------------+
W razie potrzeby dwa symbole wieloznaczne można połączyć we wzorze:
SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Oto kilka innych:
SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%donuts' AS 'Result 1', 'Charlie likes donuts' LIKE 'Ch_rlie%nuts' AS 'Result 2', 'Charlie likes donuts' LIKE 'Ch%rlie %likes %' AS 'Result 3', 'Charlie likes donuts' LIKE '% likes %' AS 'Result 4';
Wynik:
+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | +----------+----------+----------+----------+ | 1 | 1 | 1 | 1 | +----------+----------+----------+----------+
Wprowadźmy kilka zmian do tego przykładu, abyśmy mogli zobaczyć przykłady sytuacji, w których się nie zgadzają:
SELECT 'Charlie likes donuts' LIKE 'Ch%rlie_donuts' AS 'Result 1', 'Charlie likes donuts' LIKE 'Charlie_nuts' AS 'Result 2', 'Charlie likes donuts' LIKE 'Charlie _likes donuts' AS 'Result 3', 'Charlie likes donuts' LIKE '_ likes _' AS 'Result 4';
Wynik:
+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | +----------+----------+----------+----------+ | 0 | 0 | 0 | 0 | +----------+----------+----------+----------+
Przykład 3 – Przykład bazy danych
LIKE
operator jest często używany w WHERE
klauzula SELECT
oświadczenie podczas odpytywania bazy danych. Kiedy jest używany w ten sposób, zawęża wyniki tylko do pasujących rekordów, ale widzimy rzeczywiste wyniki (nie tylko 1
lub 0
).
Oto przykład, jak możemy użyć tego operatora w zapytaniu do bazy danych:
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistName LIKE 'B%';
Wynik:
+----------+----------------+ | ArtistId | ArtistName | +----------+----------------+ | 4 | Buddy Rich | | 11 | Black Sabbath | | 15 | Birds of Tokyo | | 16 | Bodyjar | +----------+----------------+
W tym przypadku było to proste zapytanie, które zwraca wszystkich wykonawców, których imiona zaczynają się na literę B .
Oto pełna lista artystów w tej tabeli:
SELECT ArtistId, ArtistName FROM Artists;
Wynik:
+----------+------------------------+ | ArtistId | ArtistName | +----------+------------------------+ | 1 | Iron Maiden | | 2 | AC/DC | | 3 | Allan Holdsworth | | 4 | Buddy Rich | | 5 | Devin Townsend | | 6 | Jim Reeves | | 7 | Tom Jones | | 8 | Maroon 5 | | 9 | The Script | | 10 | Lit | | 11 | Black Sabbath | | 12 | Michael Learns to Rock | | 13 | Carabao | | 14 | Karnivool | | 15 | Birds of Tokyo | | 16 | Bodyjar | +----------+------------------------+
Przykład 4 – Ucieczka za pomocą znaku odwróconego ukośnika
Co się stanie, jeśli jeden ze znaków wieloznacznych znajduje się w ciągu wejściowym i musisz przeprowadzić do niego dopasowanie? Możesz go zmienić za pomocą znaku odwrotnego ukośnika (\
). Oto przykład takiego wyszukiwania ze znakiem ucieczki i bez niego:
SELECT 'usr_123' LIKE 'usr_123' AS 'Without escape', 'usr_123' LIKE 'usr\_123' AS 'With escape';
Wynik:
+----------------+-------------+ | Without escape | With escape | +----------------+-------------+ | 1 | 1 | +----------------+-------------+
W tym przypadku obaj pasowali, ale z różnych powodów. Pierwszy wiersz pasował, ponieważ symbol wieloznaczny określał, że dowolny znak będzie pasował. Druga linia również pasowała, ale tylko dlatego, że ciąg wejściowy miał podkreślenie we właściwym miejscu.
Zmieńmy nieco ciąg wejściowy, aby otrzymać inny wynik:
SELECT 'usr+123' LIKE 'usr_123' AS 'Without escape', 'usr+123' LIKE 'usr\_123' AS 'With escape';
Wynik:
+----------------+-------------+ | Without escape | With escape | +----------------+-------------+ | 1 | 0 | +----------------+-------------+
Wersja bez ucieczki dała wynik pozytywny, ponieważ symbol wieloznaczny oznaczał, że w tym miejscu mogliśmy umieścić dowolną postać. Wersja ze znakami ucieczki wyraźnie stwierdzała, że tylko znak podkreślenia (_
) będzie pasować. Ciąg wejściowy nie zawierał podkreślenia w tym miejscu, więc wynik był ujemny.
Przykład 5 – ESCAPE
Klauzula
Możesz także użyć ESCAPE
klauzula, aby określić własny niestandardowy znak ucieczki. Oto przykład:
SELECT 'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1', 'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';
Wynik:
+----------+----------+ | String 1 | String 2 | +----------+----------+ | 1 | 0 | +----------+----------+
Przykład 6 – Wyrażenia numeryczne
Implementacja MySQL LIKE
operator umożliwia użycie wyrażeń numerycznych. Oto przykład:
SELECT 1234 LIKE '12%', 1234 LIKE '12_';
Wynik:
+-----------------+-----------------+ | 1234 LIKE '12%' | 1234 LIKE '12_' | +-----------------+-----------------+ | 1 | 0 | +-----------------+-----------------+