Оператор LIKE

Оператор LIKE используется при условных запросах, когда мы хотим узнать соответствует ли строка определённому шаблону.

Например, у нас есть таблица Users, в которой есть поле email:

MySQL
SELECT name, email FROM Users;
nameemail
Bruce Willis[email protected]
George Clooney[email protected]
Kevin Costner[email protected]
Samuel L. Jackson[email protected]
Kurt Russell[email protected]

Допустим, мы хотим найти всех пользователей, чья почта лежит в домене второго уровня «hotmail». Т.е. нужно отобрать только те записи, что отвечают условию:

  • после символа «@» следует «hotmail»
  • после «hotmail» следует символ «.» и далее любая последовательность символов

Для таких нетривиальных поисков по строковым полям и нужен оператор LIKE.

Синтаксис

MySQL
... WHERE поле_таблицы [NOT] LIKE шаблон_строки

Шаблон может включать следующие специальные символы:

СимволОписание
%Последовательность любых символов (число символов в последовательности может быть от 0 и более)
_Любой единичный символ

Так наш запрос на поиск пользователей в домене «hotmail» может выглядеть следующим образом:

MySQL
SELECT name, email FROM Users
WHERE email LIKE '%@hotmail.%'
nameemail
Bruce Willis[email protected]
Kevin Costner[email protected]
Jennifer Lopez[email protected]
Harrison Ford[email protected]
Michael Douglas[email protected]
Catherine Zeta-Jones[email protected]

Примеры

  • MySQL
    ... WHERE поле_таблицы LIKE 'text%'
    

    Сопоставляется любым строкам, начинающимся на «text»

  • MySQL
    ... WHERE поле_таблицы LIKE '%text'
    

    Сопоставляется любым строкам, заканчивающимся на «text»

  • MySQL
    ... WHERE поле_таблицы LIKE '_ext'
    

    Сопоставляется строкам, имеющим длину 4 символа, при этом 3 последних обязательно должны быть «ext». Например, слова «text» и «next»

  • MySQL
    ... WHERE поле_таблицы LIKE 'begin%end'
    

    Сопоставляется строкам, начинающихся на «begin» и заканчивающихся на «end»

В MySQL по умолчанию шаблоны не чувствительны к регистру

ESCAPE-символ

ESCAPE-символ используется для экранирования специальных символов (% и \). В случае если вам нужно найти строки, вы можете использовать ESCAPE-символ.

Например, вы хотите получить идентификаторы задач, прогресс которых равен 3%:

MySQL
SELECT job_id FROM Jobs
WHERE progress LIKE '3!%' ESCAPE '!';

Если бы мы не экранировали трафаретный символ, то в выборку попало бы всё, что начинается на 3.