Все предыдущие операторы, которые мы рассмотрели, производили фильтрацию по известным значениям. Они искали совпадения по одному или нескольким значениям, более чем и менее чем известное значение или диапазон значений. При этом везде искалось известное значение. Однако фильтрация данных таким способом не всегда работает.
Например, может возникнуть необходимость провести поиск по строковому значению, в котором содержится подстрока ‘DDD’.Этого нельзя сделать при помощи простых операций сравнения, здесь на помощь приходит поиск с использованием метасимволов. При помощи метасимволов можно создавать условия поиска данных. В этом примере, для того чтобы найти все продукты, в названии которых содержатся слова ‘DDD’, необходимо составить шаблон поиска, позволяющий найти текст ‘DDD’в любом месте названия продукта.
Метасимволы сами по себе являются символами, которые имеют в условии WHERE специальное значение. В SQL поддерживаются метасимволы нескольких типов. Чтобы применять метасимволы в условиях поиска, необходимо использовать ключевое слово LIKE. Оно сообщает СУБД, что следующий шаблон для поиска необходимо сравнивать с использованием метасимволов, а не искать точные совпадения.
Поиск с использованием метасимволов может осуществляться только в текстовых полях (строках), нельзя использовать метасимволы при поиске полей с нетекстовым типом данных.
Метасимвол "знак процента" (%)
Наиболее часто используемый метасимвол — знак процента (%). В строке поиска % означает найти все вхождения любого символа.
SELECT [Name],[FullName],[Offsetbook],[idGroupNumber],[Yeartraining]
,[Citizenship],[Datebirth],[Completedtraining],[Reasoncomplete]
,[Datecomplete] FROM [Students02].[dbo].[Student]
WHERE FullName LIKE '%Антон Петрович'
Т.е. тут мы ищем любого студента, которого зовут Антон Петрович, вне зависимости от фамилии.
Пример18 (результат выполнения запроса):
Есть два таких студента.
SELECT [Name],[FullName],[Offsetbook],[idGroupNumber],[Yeartraining]
,[Citizenship],[Datebirth],[Completedtraining],[Reasoncomplete]
,[Datecomplete] FROM [Students02].[dbo].[Student]
WHERE FullName LIKE '%Антон%'
Так мы ищем любого студента, зовут Антон, вне зависимости от фамилии и отчества.
Пример19 (результат выполнения запроса):
Есть четыре таких студента (Антона).
И еще в результат попала Мария Владимировна и Виктор Викторович.
Тут надо учитывать, что условие '%Антон%' будет искать любое вхождение набора символов ‘Антон’ в текстовом поле FullName. А фамилия у Марии Владимировны – Антон ова. Так что это не ошибка.
С Антон овым Виктором Викторовичем – то же самое.
Если же мы исправим условие нашего запроса с '%Антон%' на '% Антон %'
SELECT [Name],[FullName],[Offsetbook],[idGroupNumber],[Yeartraining]
,[Citizenship],[Datebirth],[Completedtraining],[Reasoncomplete]
,[Datecomplete] FROM [Students02].[dbo].[Student]
WHERE FullName LIKE '% Антон %'
Пример20 (результат выполнения запроса):