← Все вопросы

Как искать строки по шаблону в SQL (оператор LIKE и %)?

Задан 14 месяцев назад764 просмотров2 ответа
9

Хочу найти всех пользователей, чьё имя начинается на «Анна», или у кого в email есть «gmail». Как сделать поиск по части строки в SQL? Что означают символы % и _ в LIKE?

2 ответа

12
✓ Принятый ответ — помог автору

Поиск по шаблону текста делает оператор LIKE вместе со спецсимволами подстановки:

  • % — любое количество любых символов (в том числе ноль),
  • _ — ровно один любой символ.

Примеры:

-- имя начинается на 'Анна'
SELECT * FROM users WHERE name LIKE 'Анна%';

-- email содержит 'gmail' где угодно
SELECT * FROM users WHERE email LIKE '%gmail%';

-- имя заканчивается на 'ов'
SELECT * FROM users WHERE name LIKE '%ов';

-- ровно 5 символов
SELECT * FROM users WHERE code LIKE '_____';

Важные моменты:

  1. Регистр. В одних СУБД LIKE чувствителен к регистру, в других нет. В PostgreSQL для поиска без учёта регистра есть ILIKE, в MySQL обычно LIKE регистронезависим по умолчанию.

  2. Производительность. Шаблон с % в начале ('%gmail%') не может использовать обычный индекс — СУБД просматривает все строки. 'Анна%' (процент только в конце) индекс использовать может и работает быстрее.

  3. Если надо найти сам символ процента или подчёркивания как текст, его экранируют: LIKE '50\%' ESCAPE '\'.

Частая ошибка — забыть % и написать LIKE 'Анна', что эквивалентно = 'Анна' (точное совпадение), и ничего не найдётся, если имя «Анна Иванова».

4

Если шаблонов LIKE не хватает (нужны сложные правила — цифры, диапазоны символов), посмотрите в сторону регулярных выражений: в PostgreSQL это оператор ~, в MySQL — REGEXP. Например, WHERE phone ~ '^[0-9]{11}'. Но для простых «начинается с» / «содержит» LIKE проще, читается понятнее и часто быстрее.

Ваш ответ

Войдите, чтобы ответить на вопрос.