LIKE SQL — это оператор, который используется для поиска строк, содержащих определённый шаблон символов. Подробнее о нём читайте в нашей статье.
- Синтаксис LIKE SQL
- Примеры использования LIKE SQL
Использовать оператор LIKE в SQL очень просто: достаточно прописать стандартную команду выбора SELECT * FROM и задать условие через WHERE, где и будет использован оператор LIKE.
Шаблон LIKE SQL:
SELECT column1, column2, ...FROM table_nameWHERE columnN LIKE pattern;
Существует два подстановочных знака, которые используются в сочетании с оператором LIKE SQL:
- % — знак процента представляет собой ноль, один или несколько символов;
- _ — подчёркивание представляет собой один символ.
Примеры использования LIKE SQL
Рассмотрим SQL LIKE примеры. Представим, что вы хотите найти все имена, начинающиеся с буквы J. Для этого достаточно использовать следующий запрос:
SELECT * FROM table_name WHERE name LIKE 'J%';
В данном случае символ % используется для указания любого количества символов после J. Таким образом, запрос найдёт все имена, которые начинаются с буквы J, независимо от того, какие символы следуют за ней.
Ещё один пример — поиск всех адресов электронной почты, содержащих слово gmail. Для этого можно использовать следующий запрос:
SELECT * FROM table_name WHERE email LIKE '%gmail%';
Здесь символы % используются для указания, что слово gmail может быть в любом месте в адресе электронной почты.
Также можно использовать символ _ для указания одного символа. Например, запрос ниже найдет все имена, состоящие из шести символов. Эти имена должны начинаться с буквы J и заканчиваться буквой n:
SELECT * FROM table_name WHERE name LIKE 'J____n';
Здесь каждый символ _ указывает на любой один символ.
Иногда символы % и _ сами могут быть частью искомой строки. В таких случаях их нужно экранировать. Например, запрос ниже найдет все имена, содержащие символ %:
SELECT * FROM table_name WHERE name LIKE '%%%';
Это было короткое руководство по работе с SQL LIKE. Также вы можете почитать о других основных командах SQL.
В этом учебном пособии вы узнаете, как использовать в SQL Server условие LIKE (Transact-SQL) для выполнения сопоставления с шаблоном с синтаксисом и примерами.
Описание
Условие LIKE SQL Server (Transact-SQL) определяет, совпадает ли указанная символьная строка с заданным шаблоном в предложении WHERE в операторе SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление образцов.
Синтаксис
Синтаксис условия LIKE в SQL Server (Transact-SQL):
expression LIKE pattern [ ESCAPE ‘escape_character’ ]
Параметры или аргументы
expression — символьное выражение, такое как столбец или поле.
pattern — символьное выражение, содержащее подстановочный символ. Подстановочные символы, которые вы можете выбрать:
символ | пояснение |
---|---|
% | Позволяет вам сопоставлять любую строку любой длины (включая нулевую длину) |
_ | Позволяет вам сопоставлять один символ |
[ ] | Позволяет вам сопоставлять любой символ в скобках [] (например, [abc] будет соответствовать символам a, b или c) |
[^] | Позволяет вам сопоставлять любой символ, не находящийся в скобках [^] (например, [^ abc] будет соответствовать любому символу, который не является символом a, b или c) |
escape_character — необязательный. Это позволяет вам проверять для буквенных экземпляров символа подстановки, например % или _.
Пример использования подстановочного символа % (символ процента)
Первый пример SQL Server LIKE, который мы рассмотрим, включает использование шаблона %.
Давайте объясним, как шаблон % работает в SQL Server условии LIKE. Мы хотим найти всех employees (сотрудников), чье имя last_name начинается с ‘Б’.
Например:
SELECT * FROM employees WHERE last_name LIKE ‘Б%’; |
Этот пример условия SQL Server LIKE вернет всех employees у которых last_name будет начинаться на ‘Б’ такие как ‘Брошкин’, ‘Баранников’, ‘Богомолец’ и т.д.
Вы также можете использовать групповой символ % несколько раз в одной строке. Например:
SELECT * FROM employees WHERE last_name LIKE ‘%o%’; |
В этом примере SQL LIKE мы ищем всех employees (сотрудников), у которых last_name содержит букву ‘o’.
Пример использования подстановочного символа _ (символ подчеркивания)
Затем давайте объясним, как подстановочный символ _ (символ подчеркивания) работает в условии SQL Server LIKE. Помните, что _ ищет только один символ.
Например:
SELECT * FROM employees WHERE last_name LIKE ‘Кр_т’; |
Этот пример условия SQL LIKE возвращает всех employees (сотрудников), чье имя last_name равно 4 символам, причем первые два символа — «Кр», а последний символ — «т». Например, он может вернуть сотрудников, чье last_name является «Крот», «Крат», «Крут», «Крит» и т.д.
Вот еще один пример:
SELECT * FROM employees WHERE employee_number LIKE ‘123_’; |
Вам может понадобиться найти номер employee_number, но у вас есть только 3 из 4 цифр. В приведенном выше примере будет извлечено потенциально 10 записей (где отсутствующее значение могло бы равняться чему угодно от 0 до 9). Например, он может вернуть employees, чьи employee_number:
1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239
Пример использования подстановочного символа [] (квадратные скобки).
Далее, давайте объясним, как подстановочный символ [] (квадратные скобки) работает в условии SQL Server LIKE. Помните, что то, что содержится в квадратных скобках, это символы, которые вы пытаетесь сопоставить.
Например:
SELECT * FROM employees WHERE first_name LIKE ‘К[ио]тов’; |
Этот пример условия LIKE SQL Server возвращает всех employees, чье имя first_name равно 5 символам, причем первый символ — «К», а три последних символа — «тов», а второй символ — «и» или «о». Таким образом, в этом случае он будет соответствовать либо «Китов», либо «Котов».
Пример использования подстановочного символа [^] (квадратные скобки с символом ^).
Затем давайте объясним, как подстановочный символ [^] (квадратные скобки с подстановочным символом ^) работает в условии SQL Server LIKE. Помните, что то, что содержится в квадратных скобках, это символы, которые вы НЕ хотите сопоставлять.
Например:
SELECT * FROM employees WHERE first_name LIKE ‘К[^ио]тов’; |
Этот пример условия SQL Server LIKE возвращает всех сотрудников, чье имя first_name равно 5 символам, причем первый символ — «К», а три последних символа — «тов», а второй символ не является «и» или «о». Таким образом, в этом случае он будет соответствовать таким значениям, как «Катов», «Кутов», «Кетов» и т.д. Но это не будет соответствовать ни «Китов», ни «Котов».
Пример использования оператора NOT
Затем давайте посмотрим, как использовать SQL Server NOT Operator с помощью подстановочных символов.
Будем использовать % с оператором NOT. Вы также можете использовать условие SQL LIKE для поиска employees (сотрудников), имя которых не начинается с буквы «Б».
Например:
SELECT * FROM employees WHERE last_name NOT LIKE ‘Б%’; |
Поместив оператор NOT перед условием LIKE SQL Server, вы сможете получить всех employees, имя которых не начинается с «Б».
Пример использования символов Escape
Важно понимать, как сопоставить «Escape Characters» с pattern. Эти примеры относятся конкретно к экранирующим символам в SQL Server.
Предположим, вы хотели найти символ % или _ в условии SQL Server LIKE. Вы можете сделать это, используя символ Escape.
Обратите внимание, что вы можете определить escape-символ только как один символ (length = 1).
Например:
SELECT * FROM employees WHERE secret_hint LIKE ‘123!%455’ ESCAPE ‘!’; |
Этот пример условия SQL LIKE идентифицирует символ ! как escape-символ. Это предложение вернет всех employees, чей secret_hint составляет 123%455.
Вот еще один более сложный пример использования escape-символов в SQL Server условии LIKE.
SELECT * FROM employees WHERE secret_hint LIKE ‘H%!%’ ESCAPE ‘!’; |
Этот пример условия SQL LIKE возвращает всех employees, чей secret_hint начинается с ‘H’ и заканчивается на ‘%’. Например, он возвращает значение, например «Help%».
Вы также можете использовать escape-символ с символом _ в условии SQL Server LIKE.
Например:
SELECT * FROM employees WHERE secret_hint LIKE ‘H%!_’ ESCAPE ‘!’; |
Этот пример условия SQL LIKE возвращает всех employees, чей secret_hint начинается с ‘H’ и заканчивается на ‘_’. Например, он вернет значение, например «Help_».
Оператор LIKE применяется только к полям типа CHAR и VARCHAR, поскольку он используется для поиска подстрок. Другими словами, оператор LIKE осуществляет просмотр строки для выяснения: входит ли заданная подстрока в указанное поле. Для осуществления более качественного просмотра подстроки используются шаблоны. Шаблоны – это специальные символы, которые могут обозначать всё что угодно.
Шаблоны оператора LIKE для поиска
- Существует три типа шаблонов, которые можно использовать с оператором LIKE:
- Символ «нижнее подчёркивание» (_) заменяет один любой символ.
- Символ «процент» (%) заменяет последовательность символов произвольной длины, в том числе и нулевой.
- Квадратные скобки [ ], внутри них можно указать последовательность символов, чтобы выполнить поиск. Если мы укажем в квадратных скобках последовательность символов, например — ВИ, то поиск будет выполняться с учётом того, что информация будет начинаться с В или И.
Escape-символы (экранирование символов)
Чтобы найти в строке символ подчёркивания или процента, в предикате LIKE любой символ можно определить, как Escape-символ. Он используется в предикате непосредственно перед символом процента или подчёркивания, и означает что следующий за ним символ интерпретируется именно как обычный символ, а не как символ шаблона.
Практический пример с ESCAPE
Вывести из таблицы Users имена пользователей, чей прогресс составляет 44%.
SELECT name FROM Users WHERE name LIKE '44!% ' ESCAPE '!'
Практический пример с %
Вывести из таблицы Users имена пользователей, имена которых начинаются с буквы В.
SELECT name FROM Users WHERE name LIKE 'B%';
Практический пример с _
Вывести из таблицы Users имена пользователей, чьё имя составляет не более 7 символов и начинается на букву В.
SELECT name FROM Users WHERE name LIKE 'B______';
Практический пример с [ ]
Вывести из таблицы Users имена пользователей, которые начинаются на букву В и И.
SELECT name FROM Users WHERE name LIKE '[ВИ]%';
Можно использовать метасимвол ^, который означает противоположное действие. То есть сейчас мы ведем имена, которые не начинаются на буквы В и И.
SELECT name FROM Users WHERE name LIKE '[^ВИ]%';
Метки: LIKE, SQL.
Синтаксис
-
Wild Card с%: SELECT * FROM [table] WHERE [имя_столбца] Как «% Value%»
Wild Card with _: SELECT * FROM [table] WHERE [column_name] Как ‘V_n%’
Wild Card с [charlist]: SELECT * FROM [table] WHERE [column_name] Как ‘V [abc] n%’
замечания
Условие LIKE в предложении WHERE используется для поиска значений столбцов, соответствующих данному шаблону. Шаблоны формируются с использованием следующих двух подстановочных знаков
- % (Процентный символ) — Используется для представления ноль или более символов
- _ (Underscore) — используется для представления одного символа
Матч открытого шаблона
Подстановочный знак %
добавленный к началу или концу (или обеим) строки, будет содержать 0 или более символов до начала или после окончания шаблона.
Использование «%» в середине позволит совместить 0 или более символов между двумя частями шаблона.
Мы собираемся использовать эту таблицу сотрудников:
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
1 | Джон | Джонсон | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
2 | Софи | Amudsen | 2479100211 | 1 | 1 | 400 | 11-01-2010 |
3 | Ronny | кузнец | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Джон | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
5 | Хильде | сук | 2468021911 | 2 | 1 | 800 | 01-01-2000 |
Следующие утверждения соответствуют всем записям, содержащим FName, содержащие строку «on» из таблицы Employees.
SELECT * FROM Employees WHERE FName LIKE '%on%';
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
3 | R на ny | кузнец | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | J on | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Следующий оператор соответствует всем записям, имеющим PhoneNumber, начиная со строки «246» от Employees.
SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
1 | Джон | Джонсон | 246 8101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Ronny | кузнец | 246 2544026 | 2 | 1 | 600 | 06-08-2015 |
5 | Хильде | сук | 246 8021911 | 2 | 1 | 800 | 01-01-2000 |
Следующий оператор соответствует всем записям с номером PhoneNumber, заканчивающимся на строку «11» от Employees.
SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
2 | Софи | Amudsen | 24791002 11 | 1 | 1 | 400 | 11-01-2010 |
5 | Хильде | сук | 24680219 11 | 2 | 1 | 800 | 01-01-2000 |
Все записи, где 3-й символ Fname — «n» от сотрудников.
SELECT * FROM Employees WHERE FName LIKE '__n%';
(два символа подчеркивания используются до «n», чтобы пропустить первые 2 символа)
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
3 | Ronny | кузнец | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Джон | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Совпадение одного символа
Чтобы расширить выбор оператора структурированного запроса (SQL-SELECT), можно использовать подстановочные знаки, знак процента (%) и подчеркивание (_).
Символ _
(подчеркивание) может использоваться в качестве подстановочного знака для любого отдельного символа в совпадении с шаблоном.
Найдите всех сотрудников, чье Fname начинается с «j» и заканчивается на «n» и имеет ровно 3 символа в Fname.
SELECT * FROM Employees WHERE FName LIKE 'j_n'
_
(подчеркивание) также может использоваться более одного раза в качестве дикой карты для соответствия шаблонам.
Например, этот шаблон будет соответствовать «jon», «jan», «jen» и т. Д.
Эти имена не будут отображаться «jn», «john», «jordan», «justin», «jason», «julian», «jillian», «joann», потому что в нашем запросе используется один знак подчеркивания, и он может пропустить точно один символ, поэтому результат должен иметь 3 символа Fname.
Например, этот шаблон будет соответствовать «LaSt», «LoSt», «HaLt» и т. Д.
SELECT * FROM Employees WHERE FName LIKE '_A_T'
Соответствие диапазону или набору
Сопоставьте любой отдельный символ в указанном диапазоне (например: [af]
) или установите (например: [abcdef]
).
Этот шаблон диапазона будет соответствовать «gary», но не «mary»:
SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'
Этот шаблон будет соответствовать «mary», но не «gary»:
SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'
Диапазон или набор можно также отменить, добавив ^
каретку перед диапазоном или установить:
Этот шаблон диапазона не будет соответствовать «gary», но будет соответствовать «mary»:
SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'
Этот шаблон набора не будет соответствовать «mary», но будет соответствовать «gary»:
SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'
Матч ЛЮБОЙ против ВСЕХ
Совпадение:
Необходимо совместить хотя бы одну строку. В этом примере тип продукта должен быть «электроникой», «книгами» или «видео».
SELECT *
FROM purchase_table
WHERE product_type LIKE ANY ('electronics', 'books', 'video');
Все совпадение (должно соответствовать всем требованиям).
В этом примере должны быть согласованы как «объединенное королевство», так и «лондон» и «восточная дорога» (включая вариации).
SELECT *
FROM customer_table
WHERE full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');
Отрицательный выбор:
Используйте ВСЕ, чтобы исключить все элементы.
В этом примере приводятся все результаты, когда тип продукта не является «электроникой», а не «книгами», а не «видео».
SELECT *
FROM customer_table
WHERE product_type NOT LIKE ALL ('electronics', 'books', 'video');
Поиск диапазона символов
Следующий оператор соответствует всем записям, имеющим FName, которое начинается с буквы от A до F из таблицы Employees .
SELECT * FROM Employees WHERE FName LIKE '[A-F]%'
Выписка ESCAPE в LIKE-запросе
Если вы реализуете текстовый поиск как LIKE
-query, вы обычно делаете это так:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%')
Однако (помимо того, что вы не должны использовать LIKE
когда вы можете использовать полнотекстовый поиск), это создает проблему, когда кто-то вводит текст типа «50%» или «a_b».
Таким образом (вместо перехода на полнотекстовый поиск) вы можете решить эту проблему с помощью инструкции LIKE
-escape:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE ''
Это означает, что теперь будет рассматриваться как символ ESCAPE. Это означает, что теперь вы можете просто добавить
к каждому символу в строке, которую вы ищете, и результаты будут корректными, даже если пользователь вводит специальный символ, например
%
или _
.
например
string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch)
newString += @"" + c;
sqlCmd.Parameters.Add("@in_SearchText", newString);
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);
Примечание. Вышеупомянутый алгоритм предназначен только для демонстрационных целей. Он не будет работать в случаях, когда 1 графема состоит из нескольких символов (utf-8). например string stringToSearch = "Les Miseu0301rables";
Вам нужно будет сделать это для каждой графемы, а не для каждого персонажа. Вы не должны использовать вышеуказанный алгоритм, если имеете дело с азиатскими / восточно-азиатскими / южноазиатскими языками. Вернее, если вам нужен правильный код для начала, вы должны просто сделать это для каждого graphemeCluster.
См. Также ReverseString, вопрос интервью с C #
Подстановочные знаки
подстановочные символы используются с оператором SQL LIKE. Подстановочные знаки SQL используются для поиска данных в таблице.
Подстановочные знаки в SQL:%, _, [charlist], [^ charlist]
% — заменить ноль или более символов
Eg: //selects all customers with a City starting with "Lo"
SELECT * FROM Customers
WHERE City LIKE 'Lo%';
//selects all customers with a City containing the pattern "es"
SELECT * FROM Customers
WHERE City LIKE '%es%';
_ — заменить один символ
Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';
[charlist] — устанавливает и диапазоны символов для соответствия
Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';
//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
[^ charlist] — Соответствует только символу, не указанному в скобках
Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';
or
SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';
Оператор LIKE используется при условных запросах, когда мы хотим узнать соответствует ли строка определённому шаблону.
Например, у нас есть таблица Users, в которой есть поле email:
SELECT name, email FROM Users;
Допустим, мы хотим найти всех пользователей, чья почта лежит в домене второго уровня «hotmail». Т.е. нужно отобрать только те записи, что
отвечают условию:
- после символа «@» следует «hotmail»
- после «hotmail» следует символ «.» и далее любая последовательность символов
Для таких нетривиальных поисков по строковым полям и нужен оператор LIKE.
Синтаксис
... WHERE поле_таблицы [NOT] LIKE шаблон_строки
Шаблон может включать следующие специальные символы:
Так наш запрос на поиск пользователей в домене «hotmail» может выглядеть следующим образом:
SELECT name, email FROM Users WHERE email LIKE '%@hotmail.%'
Примеры
-
... WHERE поле_таблицы LIKE 'text%'
Сопоставляется любым строкам, начинающимся на «text»
-
... WHERE поле_таблицы LIKE '%text'
Сопоставляется любым строкам, заканчивающимся на «text»
-
... WHERE поле_таблицы LIKE '_ext'
Сопоставляется строкам, имеющим длину 4 символа, при этом 3 последних обязательно должны быть «ext». Например, слова «text» и «next»
-
... WHERE поле_таблицы LIKE 'begin%end'
Сопоставляется строкам, начинающихся на «begin» и заканчивающихся на «end»
В MySQL по умолчанию шаблоны не чувствительны к регистру
ESCAPE-символ
ESCAPE-символ используется для экранирования специальных символов (% и ).
В случае если вам нужно найти строки, вы можете использовать ESCAPE-символ.
Например, вы хотите получить идентификаторы задач, прогресс которых равен 3%:
SELECT job_id FROM Jobs WHERE progress LIKE '3!%' ESCAPE '!';
Если бы мы не экранировали трафаретный символ, то в выборку попало бы всё, что начинается на 3.