Оператор LIKE T-SQL является одним из наиболее полезных дополнений к оператору SQL SELECT. Последний извлекает набор результатов, и вы можете легко фильтровать результаты, используя операторы равенства и клаузу WHERE, чтобы выбрать определенные условия. Но что насчет тех случаев, когда вы хотите выбрать строки, основанные на частичных значениях? Именно здесь и пригодится оператор SQL LIKE, и я покажу вам, как его использовать в этом руководстве.
Синтаксис SQL LIKE
Основный синтаксис оператора LIKE можно увидеть в следующем списке:
- Сначала вы указываете выражение, которое хотите сопоставить. Обычно это имя столбца.
- Затем вы можете дополнительно указать NOT, чтобы сделать это выражение работающим для всех условий, которые не соответствуют. Использование условия NOT LIKE не является наиболее распространенным способом использования оператора LIKE.
- Тогда вам нужно предоставить шаблон для сопоставления. Это может быть буквальным или может включать в себя символы-джокеры, которые делают процесс сопоставления намного более гибким.
- Это может быть необязательно следует за символом эскейп, который можно использовать, чтобы помочь искать символы-джокеры.
- Если какой-либо из аргументов не является типом данных строки символов, SQL Server преобразует его в тип данных строки символов.
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
SQL LIKE и символы-джокеры
Прежде чем мы углубимся в детали, вы должны знать, что сопоставление шаблонов SQL LIKE может включать обычные символы, а также символы-джокеры. Символы-джокеры позволяют вам выбрать конкретную строку символов, которая соответствует шаблону символа-джокера.
Для сопоставления шаблонов обычные символы должны соответствовать указанным в строке символов. Однако символы-джокеры могут соответствовать любым фрагментам строки символов. Использование символов-джокеров делает оператор LIKE более гибким, чем обычные операторы сравнения строк ( = и != ).
Оператор LIKE принимает четыре разных типа символов-джокеров. Каждый символ-джокер выполняет разную функцию сравнения, и вы можете узнать больше в следующей таблице.
Wildcard character | Description |
% (percent sign) | Any string of zero or more characters. |
_ (underscore) | Any single character. |
[ ] | Any single character within the specified range [a-f] or set [abcdef]. |
[^] | Any single character not within the specified range [^a-f] or set [^abcdef]. |
Оператор LIKE возвращает TRUE, если match_expression соответствует указанному шаблону. Давайте рассмотрим несколько примеров, чтобы показать вам, как использовать оператор SQL LIKE с образцом базы данных AdventureWorksLT2019.
Сопоставление нескольких символов-джокеров
% шаблон представляет собой ноль или более символов. Следующий запрос извлекает все строки из таблицы ‘Person.Person’, где ‘LastName’ начинается с буквы ‘A’.
USE AdventureWorksLT2019; SELECT FirstName, LastName FROM SalesLT.Customer WHERE LastName LIKE 'A%';

Сопоставление шаблона для одного символа
_ шаблон представляет собой один символ. Следующий пример запроса извлекает все строки из таблицы ‘SalesLT.Product’, где ‘Name’ имеет ровно четыре символа любого типа, за которыми следует дефис.
USE AdventureWorksLT2019; SELECT ProductID, Name FROM SalesLT.Product WHERE Name LIKE '____-%';

Сопоставление шаблона для набора символов
Wildcard-символ [] представляет любой отдельный символ в указанном диапазоне или наборе. Следующий оператор SQL извлекает все строки из таблицы ‘SalesLT.Product’, где ‘Name’ начинается с ‘B’, ‘C’ или ‘D’.
USE AdventureWorksLT2019; SELECT Name FROM SalesLT.Product WHERE Name LIKE '[BCD]%';

Подстановка символов для диапазона символов
Также можно использовать оператор LIKE для поддержки поиска по диапазону. Этот запрос извлекает фамилии, заканчивающиеся на ‘ee’ и начинающиеся с любого отдельного символа между буквами ‘C’ и ‘L’.
USE AdventureworksLT2019; SELECT LastName, FirstName FROM SalesLT.Customer WHERE LastName LIKE '[C-L]ee'

Исключение символов, не входящих в указанный набор
Wildcard-символ [^] представляет любой отдельный символ, не входящий в указанный диапазон или набор. Следующий запрос извлекает все строки из таблицы ‘SalesLT.Product’, где ‘Name’ не начинается с ‘A’, ‘B’ или ‘C’.
USE AdventureworksLT2019; SELECT Name FROM SalesLT.Product WHERE Name LIKE '[^ABC]%';

Использование нескольких условий с подстановочными символами
Оператор LIKE также может быть объединен с несколькими подстановочными символами в одном запросе. В следующем запросе используются несколько подстановочных символов SQL для извлечения всех строк из таблицы ‘Person.Person’, где ‘FirstName’ содержит букву ‘a’, а ‘LastName’ имеет любой символ, за которым следует ‘l’.
USE AdventureworksLT2019; SELECT FirstName, LastName FROM SalesLT.Customer WHERE FirstName LIKE '%a%' AND LastName LIKE '_l%';

Поиск подстановочных символов
Использование подстановочных символов добавляет много мощности и гибкости оператору LIKE. Однако вам может быть интересно, как использовать LIKE для сопоставления с самими этими подстановочными символами.
Для этого вы можете заключить подстановочный символ в квадратные скобки, что позволяет использовать подстановочный символ как буквальный символ. Вы можете увидеть некоторые примеры в следующей таблице.
Pattern | Search value |
LIKE ‘%2[%]%’ | 2% |
LIKE ‘%[_]m%’ | _m |
LIKE ‘%[ [ ]%’ | [ |
- Первый пример сопоставляет число 2, за которым следует символ подстановки процента.
- Второй пример сопоставляет символ подчеркивания, за которым следует буква m.
- Третий пример используется для сопоставления квадратных скобок.

Оператор LIKE SQL улучшает оператор SELECT SQL
Теперь вам следует лучше понять, как использовать оператор SQL LIKE для увеличения мощности и гибкости оператора SQL SELECT. Здесь я также показал вам, как использовать оператор LIKE с различными символами подстановки. Между сопоставлением нескольких символов подстановки, выполнением сопоставления одиночного символа, сопоставлением набора символов или исключением символов из результатов у вас действительно есть много возможностей.
Source:
https://petri.com/sql-like/