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.

Zobacz też:
REGEXP
LOCATE()