Оператор SQL Server LIKE

В этом руководстве вы узнаете, как использовать оператор SQL Server LIKE для проверки соответствия строки символов указанному шаблону.

Введение в оператор LIKE SQL Server

Оператор LIKE в SQL Server — это логический оператор, который проверяет, соответствует ли строка символов указанному шаблону.

Шаблон может включать обычные символы и подстановочные знаки. Оператор LIKE используется в предложении WHERE операторов SELECT, UPDATE и DELETE для фильтрации строк на основе сопоставления с шаблоном.

Вот синтаксис оператора LIKE:

column | expression LIKE pattern [ESCAPE escape_character]

Шаблон

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

  • Подстановочный знак процента(%): любая строка из нуля или более символов.
  • Подстановочный знак подчеркивания(_): любой одиночный символ.
  • Подстановочный знак [список символов]: любой отдельный символ из указанного набора.
  • [Символ-символ]: любой одиночный символ в указанном диапазоне.
  • [^]: любой символ, который не входит в список или диапазон.

Подстановочные знаки делают оператор LIKE более гибким, чем операторы сравнения строк «равно»(=) и «не равно»(!=).

Escape-символ

Символ экранирования указывает оператору LIKE обрабатывать символы подстановки как обычные символы. Символ экранирования не имеет значения по умолчанию и должен оцениваться только как один символ.

Оператор LIKE возвращает значение TRUE, если столбец или выражение соответствует указанному шаблону.

Чтобы отменить результат оператора LIKE, используйте оператор NOT следующим образом:

column | expression NOT LIKE pattern [ESCAPE escape_character]

Примеры оператора LIKE для SQL Server

Мы будем использовать следующую таблицу клиентов из образца базы данных :

таблица клиентов

1) Примеры использования оператора LIKE с подстановочным знаком %

В следующем примере оператор LIKE с подстановочным знаком % используется для поиска клиентов, фамилия которых начинается с буквы z:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE 'z%'
ORDER BY
    first_name;

Пример SQL Server LIKE

В следующем примере оператор LIKE с подстановочным знаком % используется для возврата клиентов, фамилия которых заканчивается на строку er:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '%er'
ORDER BY
    first_name;

Пример процента SQL Server LIKE

В следующем операторе оператор LIKE используется для извлечения клиентов, фамилия которых начинается с буквы t и заканчивается на букву s:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE 't%s'
ORDER BY
    first_name;

SQL Server LIKE percent wildcard example

2) Пример использования оператора LIKE с подстановочным знаком _(подчеркивание)

Подчеркивание представляет собой один символ. Например, следующий оператор возвращает клиентов, где второй символ — буква u:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '_u%'
ORDER BY
    first_name; 

Пример подстановочного знака подчеркивания LIKE для SQL Server

Шаблон _u%

  • Первый символ подчеркивания(_) соответствует любому отдельному символу.
  • Вторая буква u точно соответствует букве u.
  • Третий символ % соответствует любой последовательности символов.

3) Пример использования оператора LIKE с подстановочным знаком [список символов]

Квадратные скобки со списком символов, например, [ABC] представляют один символ, который должен быть одним из символов, указанных в списке.

Например, следующий запрос возвращает клиентов, у которых первая буква фамилии — Y или Z:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '[YZ]%'
ORDER BY
    last_name;

Пример списка символов LIKE для SQL Server

4) Пример использования оператора LIKE с подстановочным знаком [символ-символ]

Квадратные скобки с диапазоном символов, например, [AC], представляют собой один символ, который должен находиться в указанном диапазоне.

Например, следующий запрос находит клиентов, у которых первый символ фамилии является буквой из диапазона от A до C:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '[A-C]%'
ORDER BY
    first_name;

Пример диапазона LIKE для SQL Server

5) Пример использования оператора LIKE с подстановочным знаком [^Список или диапазон символов]

Квадратные скобки со знаком вставки(^), за которыми следует диапазон, например, [^AC], или список символов, например, [ABC], представляют собой один символ, который не входит в указанный диапазон или список символов.

Например, следующий запрос возвращает клиентов, у которых первый символ фамилии не входит в диапазон от A до X:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    last_name LIKE '[^A-X]%'
ORDER BY
    last_name;

Пример курсора LIKE для SQL Server

6) Пример использования оператора NOT LIKE

В следующем примере оператор NOT LIKE используется для поиска клиентов, у которых первый символ в имени не является буквой A:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    first_name NOT LIKE 'A%'
ORDER BY
    first_name;

SQL Server НЕ ПОДОБНЫЙ пример

7) Пример использования оператора LIKE с ESCAPE

Сначала создадим новую таблицу для демонстрации:

CREATE TABLE sales.feedbacks(
  feedback_id INT IDENTITY(1, 1) PRIMARY KEY, 
  comment VARCHAR(255) NOT NULL
);

Во-вторых, вставьте несколько строк в таблицу sales.feedbacks:

INSERT INTO sales.feedbacks(comment)
VALUES('Can you give me 30% discount?'),
     ('May I get me 30USD off?'),
     ('Is this having 20% discount today?');

В-третьих, запросите данные из таблицы sales.feedbacks:

SELECT * FROM sales.feedbacks;

SQL Server LIKE - пример таблицы

Если вы хотите найти 30% в колонке комментариев, вы можете придумать такой запрос:

SELECT 
   feedback_id,
   comment
FROM 
   sales.feedbacks
WHERE 
   comment LIKE '%30%';

SQL Server LIKE без предложения ESCAPE

Запрос возвращает комментарии, содержащие 30% и 30 долларов США, что не соответствует нашим ожиданиям.

Чтобы решить эту проблему, можно использовать предложение ESCAPE:

SELECT 
   feedback_id, 
   comment
FROM 
   sales.feedbacks
WHERE 
   comment LIKE '%30!%%' ESCAPE '!';

SQL Server LIKE с предложением ESCAPE

В этом запросе предложение ESCAPE указывает, что символ ! является экранирующим символом.

Он указывает оператору LIKE обрабатывать символ % как буквальную строку, а не как подстановочный знак. Обратите внимание, что без предложения ESCAPE запрос вернул бы пустой набор результатов.

Краткое содержание

  • Используйте оператор LIKE, чтобы проверить, соответствует ли значение указанному шаблону.
  • Используйте оператор NOT для отрицания оператора LIKE.
Мирослав С.

Автор статей, ИБ-специалист