LIKE
str [NOT] LIKE pattern [ESCAPE char]
Zwraca 1, gdy ciąg znaków pasuje do wzorca. Znak % oznacza dowolną liczbę znaków (także żadnego), _ dokładnie jeden znak. Wielkość liter i znaki diakrytyczne zależą od collation.
Parametry
- pattern – ciąg znaków z symbolami wieloznacznymi % i _.
- ESCAPE char – opcjonalnie znak, który znosi znaczenie % i _ (domyślnie ukośnik wsteczny).
Przykłady
Przykłady z tabelami customers, products i orders korzystają z przykładowej bazy danych z serii Podstawy SQL.
SELECT name FROM products WHERE name LIKE 'c%' ORDER BY id;
+-------------------+ | name | +-------------------+ | Coffee beans 1 kg | | Coffee grinder | | Cane sugar | +-------------------+
Fragment ciągu w dowolnym miejscu i dokładna liczba znaków:
SELECT name, name LIKE '%coffee%' AS contains_coffee, name LIKE '_____ %' AS first_word_5_chars FROM products ORDER BY id;
+-------------------+-----------------+--------------------+ | name | contains_coffee | first_word_5_chars | +-------------------+-----------------+--------------------+ | Coffee beans 1 kg | 1 | 0 | | Green tea | 0 | 1 | | White mug | 0 | 1 | | Glass teapot | 0 | 1 | | Coffee grinder | 1 | 0 | | Cane sugar | 0 | 0 | +-------------------+-----------------+--------------------+
Szukanie samego znaku % – znieś jego znaczenie własnym znakiem w ESCAPE:
SELECT '50% off' LIKE '%!%%' ESCAPE '!' AS with_percent, '50 EUR off' LIKE '%!%%' ESCAPE '!' AS without_percent;
+--------------+-----------------+ | with_percent | without_percent | +--------------+-----------------+ | 1 | 0 | +--------------+-----------------+
Na co uważać
- Wzorzec zaczynający się od % ('%coffee%') nie korzysta z indeksu i przeszukuje całą tabelę. Do wyszukiwania pełnotekstowego w dużych tabelach użyj indeksu FULLTEXT.
- Szukany tekst od użytkownika przekazuj przez prepared statement i wcześniej podwój lub poprzedź znakiem ucieczki występujące w nim % i _, inaczej „50%” znajdzie też „500”.
- W utf8mb4_unicode_ci nie są rozróżniane ani wielkość liter, ani znaki diakrytyczne ('c%' znajdzie „Coffee” i „cane”, 'cafe' znajdzie „Café”). Do dokładnej zgodności użyj collation _bin albo LIKE BINARY.