Комбинирование LIKE и IN в SQL Server: фильтрация строк

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы имитировать поведение операции IN в SQL Server, используйте операцию LIKE в комбинации с оператором OR:

SQL
Скопировать код
SELECT * FROM ВашаТаблица
WHERE ВашСтолбец LIKE '%образец1%'
   OR ВашСтолбец LIKE '%образец2%';

Такое сочетание позволяет выбирать строки, в которых ВашСтолбец соответствует одному из указанных шаблонов LIKE.

Вариацию критериев поиска можно настроить в соответствии с требованиями:

  • '%образец%': Поиск отрывка образца в любой части строки.
  • 'образец%': Поиск образца в начале строки.
  • '%образец': Поиск образца в конце строки.

Для динамического сопоставления с шаблонами можно использовать следующий синтаксис:

SQL
Скопировать код
SELECT * FROM ВашаТаблица
WHERE ВашСтолбец LIKE '%' + ДругойСтолбец + '%';

Продвинутые тактики: CASE и ПОДЗАПРОС

С целью более гибкого поиска по шаблонам рекомендуется применять операции CASE и подзапросы, расширяющие возможности настройки условий:

SQL
Скопировать код
SELECT * FROM ВашаТаблица
WHERE ВашСтолбец LIKE CASE WHEN СтолбецУсловия = 'A' THEN '%образецA%' 
                           WHEN СтолбецУсловия = 'B' THEN '%образецB%'
                           ELSE ВашСтолбец 
                      END;

Такой подход обеспечивает настройку условий поиска исходя из значений других столбцов.

Работу с набором шаблонов можно организовать с помощью подзапросов, создающих эффект использования операции IN:

SQL
Скопировать код
SELECT * FROM ВашаТаблица
WHERE EXISTS (
    SELECT 1 
    FROM (VALUES ('%образец1%'), ('%образец2%')) AS Шаблоны(Образец)
    WHERE ВашСтолбец LIKE Шаблоны.Образец
);

Так, структура с табличными значениями представляет собой единую группу шаблонов.

Настройка производительности: Полнотекстовый поиск

При необходимости глобального поиска стоит обратить внимание на полнотекстовый поиск в SQL Server. Полнотекстовые индексы ускоряют и уточняют поиск:

SQL
Скопировать код
SELECT * FROM ВашаТаблица
WHERE CONTAINS(ВашСтолбец, '"*образец*"');

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

Визуализация

Шаблоны можно представить как элементы пазла (🧩), которые следует совместить с образами в коллекции данных, представляющей собой коробку с пазлами (📦). Поиск по "LIKE" нацелен на сопоставление формы каждого элемента с изображением на коробке, чтобы найти оптимальное совпадение:

Markdown
Скопировать код
Элементы пазла (🧩): ['%кошка%', '%собака%', '%птица%']

Коробка пазла (📦): ['Быстрая коричневая 🐶', 'Прыгающая ленивая 🐱', 'Голубое небо с 🐦']

Совпадения 🧩🔍📦: ['Прыгающая ленивая 🐱', 'Голубое небо с 🐦']

Тактика для продвинутых пользователей с UNION и JOIN

В условиях необходимости выполнения сложных запросов, SQL предлагает техники UNION и JOIN.

Использование UNION для объединения шаблонов:

Сложные шаблоны можно разбить на отдельные запросы и объединить их с помощью UNION:

SQL
Скопировать код
SELECT * FROM ВашаТаблица
WHERE ВашСтолбец LIKE '%образец1%'
UNION
SELECT * FROM ВашаТаблица
WHERE ВашСтолбец LIKE '%образец2%';

Соединение данных с помощью JOIN:

JOIN можно использовать для объединения таблиц по совпадающим шаблонам:

SQL
Скопировать код
SELECT a.*, b.*
FROM ТаблицаА a
JOIN ТаблицаБ b ON a.СтолбецА LIKE '%' + b.СтолбецБ + '%';

Успешное соединение шаблонов с помощью функций

Создавайте табличные функции для повторного применения логики поиска:

SQL
Скопировать код
CREATE FUNCTION dbo.СовпадениеШаблонов (@Шаблон NVARCHAR(100))
RETURNS TABLE AS RETURN (
    SELECT * FROM ВашаТаблица
    WHERE ВашСтолбец LIKE '%' + @Шаблон + '%'
);

Такие функции облегчают процесс формирования запросов:

SQL
Скопировать код
SELECT * FROM dbo.СовпадениеШаблонов('интересное');

Полезные материалы

  1. STRING_SPLIT (Transact-SQL) – SQL Server | Microsoft Learn — функция разделения строк.
  2. SQL LIKE | Basic SQL – Mode — руководство по оператору LIKE в SQL Server.
  3. SQL LIKE Operator – W3Schools — подробнее об использовании шаблонных символов в операции LIKE.
  4. CREATE FUNCTION (Transact-SQL) – SQL Server | Microsoft Learn — руководство по созданию функций в SQL, в том числе табличных функций (TVF).