~ 12 минут
SQL LIKE: полное руководство с примерами
1634
09.11.2024
Как использовать LIKE в SQL для поиска текста. Примеры с %, _, WHERE, NOT LIKE для MySQL.


Содержание
Привет, путник! Наверняка, если ты здесь, то уже слышал, что оператор LIKE в SQL используется для поиска строк в столбцах, которые соответствуют определенному шаблону. Его также часто применяют в сочетании с операторами SELECT и WHERE для фильтрации данных.
Синтаксис оператора LIKE
SELECT column1, column2, ... FROM table_name WHERE column_name LIKE pattern;
LIKE поддерживает два основных символа подстановки:
% — соответствует любому количеству символов (включая 0).
_ — соответствует одному символу.
Примеры:
1. Поиск строк, начинающихся на определенные символы
SELECT * FROM employees WHERE name LIKE 'A%';
Этот запрос выбирает всех сотрудников, чьи имена начинаются на "A".
2. Поиск строк, заканчивающихся на определенные символы:
SELECT * FROM employees WHERE name LIKE '%ира';
С помощью такого запроса мы получим список список сотрудников, чьи имена заканчиваются на son. Например, Гульжазира.
3. Поиск строк, содержащий определенные символы
SELECT * FROM employees WHERE name LIKE '%зи%';
Этот запрос выбирает всех сотрудников, чьи имена содержат "зи" в любой позиции. Например, Жазира, Газиза и т.п.
4. Поиск строк по длине
SELECT * FROM employees WHERE name LIKE '____';
Этим запросом мы выбираем всех сотрудников, чьи имена состоят ровно из 4 символов.
Учтите, что LIKE нечувствителен к регистру в некоторых СУБД, например в MySQL.
Особенности оператора LIKE в SQLite
В SQLite по умолчанию этот оператор нечувствителен к регистру. Например, шаблон 'A%' найдет строки, которые начинаются как с 'A', так и с 'a'.
Чувствительность к регистру с помощью GLOB
Если вам нужно учитывать регистр, можно использовать оператор GLOB. Этот оператор работает аналогично LIKE, но чувствителен к регистру:
SELECT * FROM employees WHERE name GLOB 'A*';
Настройка регистрозависимости LIKE
Чтобы сделать LIKE чувствительным к регистру, можно изменить режим сопоставления. Например, задать кастомную функцию для LIKE, но это более сложный подход, требующий модификации SQLite на уровне конфигурации.
Пример использования LIKE в SQLite
SELECT * FROM employees WHERE name LIKE 'J%'; -- Поиск всех имен, начинающихся с 'J' или 'j'
Еще примеры
Оператор LIKE можно использовать довольно творчески, особенно в комбинациях с другими SQL функциями и условиями. Вот несколько интересных примеров:
1. Поиск по шаблону с несколькими условиями
Можно комбинировать LIKE с AND и OR для создания более сложных фильтров.
SELECT * FROM products WHERE name LIKE 'A%' OR description LIKE '%спец%' AND price > 100;
Этот запрос выбирает все продукты, название которых начинается с буквы "A" или содержит слово "спец" в описании, и цена которых больше 100.
2. Поиск с исключением с помощью NOT LIKE
Если вам нужно исключить строки, которые соответствуют шаблону, используйте NOT LIKE.
SELECT * FROM users WHERE email NOT LIKE '%@mail.ru';
Этот запрос выберет всех пользователей, чьи email-адреса не заканчиваются на @mail.ru.
3. Поиск с использованием символов подстановки в фиксированных позициях
Например, вы ищете номера телефонов, у которых третья и четвертая цифры — это "45".
SELECT * FROM contacts WHERE phone_number LIKE '__45%';
Этот запрос найдет все номера телефонов, где третья и четвертая цифры — "45", независимо от других цифр.
4. Поиск на основе определенного паттерна длины
Используя символ _, можно найти строки с конкретным количеством символов. Например, найти все коды, которые имеют ровно 8 символов.
SELECT * FROM transactions WHERE transaction_code LIKE '________';
Этот запрос выберет все транзакции, у которых код состоит из ровно 8 символов.
5. Использование LIKE с условием диапазона для символов
Некоторые СУБД поддерживают диапазоны с LIKE. В SQLite это возможно через GLOB. Например, вы ищете имена, начинающиеся с букв от "A" до "M":
SELECT * FROM employees WHERE name GLOB '[A-M]*';
Этот запрос выберет всех сотрудников, чьи имена начинаются на буквы от "A" до "M".
6. Поиск по шаблону в формате даты
Если дата хранится как текст, можно использовать LIKE для поиска по конкретным дням, месяцам или годам.
SELECT * FROM events WHERE event_date LIKE '2023-12-%';
Этот запрос выберет все события, которые происходят в декабре 2023 года.
7. Поиск с учётом нескольких символов на определённых позициях
Например, вам нужно найти почтовые индексы, начинающиеся с 123, но заканчивающиеся на любые две цифры.
SELECT * FROM addresses WHERE postal_code LIKE '123__';
Этот запрос выберет все почтовые индексы, которые начинаются на "123" и имеют ровно пять символов.
8. Комбинация LIKE с функцией LOWER() для регистрозависимости
Для чувствительности к регистру в SQLite можно использовать LOWER() или UPPER():
SELECT * FROM products WHERE LOWER(name) LIKE 'a%';
Этот запрос выбирает все продукты, название которых начинается с "a" (без учета регистра), независимо от того, написаны ли они в верхнем или нижнем регистре.
9. Использование LIKE для поиска на основе частей слов
Можно использовать LIKE для поиска в середине текста. Например, найти все описания, содержащие слова с корнем "graph".
SELECT * FROM books WHERE description LIKE '%graph%';
Этот запрос выберет все книги, в описаниях которых встречаются такие слова, как "graph", "graphics", "paragraph", и т. д.
10. Поиск всех строк, содержащих специальные символы
Например, найти все записи, которые содержат символ % (если, например, это символ для обозначения скидки):
SELECT * FROM promotions WHERE description LIKE '%\%%' ESCAPE '\';
Этот запрос выберет все записи с % в описании, используя ESCAPE для обозначения % как символа, а не подстановки.
Буду рад если этот подробный мануал поможет тебе понять как использовать оператор LIKE в твоих проектах! Удачи в кодинге!
Читать далее
MongoDB - это документоориентированная система управления базами данных с открытым исходным кодом, не требующая описания схемы таб...
Большинство из нас используют элемент div по умолчанию, потому что это самый быстрый способ создания макета HTML. Возникает соблаз...
Карта сайта (или Sitemap) - важная часть SEO для любого популярного публичного веб-сайта. По сути, это список URL-адресов, которые...
Есть интересная идея?
И вы очень хотите ее реализовать, пишите нам и получите подробное коммерческое предложение и быструю реализацию