Использование метасимволов для фильтрации
6. Использование метасимволов для фильтрации в операторе LIKE
Метасимволы – это специальные символы, применяемые для поиска части значения. Например, если надо найти продукты, в названии которых содержаться слова bean bag (боб сумка), то это нельзя сделать простыми операторами сравнения. Здесь нужны метасимволы, которые позволяют составить шаблон поиска. Метасимволы сами по себе являются символами, которые имеют в условии WHERE специальное значение. Чтобы применять метасимволы в условиях поиска, необходимо использовать ключевое слово LIKE. Оно сообщает СУБД, что следующий шаблон для поиска необходимо сравнивать с использованием метасимволов, а не искать точные совпадения. LIKE – это предикат. Поиск с использованием метасимволов может осуществляться только в текстовых полях (строках), нельзя их использовать при поиске с нетекстовым типом данных.
6.1. Метасимвол ”знак процента” (%)
В строке поиска % означает найти все вхождения любого символа. Например, чтобы найти все продукты, название которых начинается со слова Fish, нужно выполнить запрос.
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE ‘Fish%’;
--------------------------
prod_id prod_name
Рекомендуемые материалы
BNBG01 Fish bean bag toy
Примечание. 1) В СУБД Access вместо символа % используется символ *.
2) В некоторых СУБД поиск может зависеть от регистра.
Метасимволы можно использовать в любом месте шаблона поиска, причем в неограниченном количестве.
В примере шаблон поиска '*bean bag*' означает найти все значения, содержащие bean bag в любом месте названия.
SELECT prod_id, prod_name выбор столбцов
FROM Products из таблицы
WHERE prod_name LIKE ‘*bean bag*’; критерий поиска
--------------------------
prod_id prod_name
BNBG01 Fish bean bag toy
BNBG02 Bird bean bag toy
BNBG03 Rabbit bean bag toy
Многие СУБД, включая MS Access, заполняют содержимое поля пробелами. Например, если столбец рассчитан на 50 символов, а в нем вставлен текст Fish bean bag toy (17 символов), то, чтобы заполнить столбец, в него может быть добавлено еще 33 символа пробел.
Выполним запрос для поиска всех продуктов, которые начинаются на F и заканчиваются на y.
SELECT prod_id, prod_name выбор столбцов
FROM Products из таблицы
WHERE prod_name LIKE ‘F*y’; критерий поиска
--------------------------
prod_id prod_name
Результат не будет найден, т.к. значение заполнено пробелами. Решенем может быть добавление второго символа * в шаблон поиска, после чего будут учитываться пробелы после буквы y.
SELECT prod_id, prod_name выбор столбцов
FROM Products из таблицы
WHERE prod_name LIKE ‘F*y*’; критерий поиска
--------------------------
prod_id prod_name
BNBG01 Fish bean bag toy
6.2. Метасимвол ”символ подчеркивания” (_)
Символ подчеркивания используется так же, как и %, но при этом учитывается не много символов, а только один.
В MS Access вместо символа подчеркивания _ используется символ ?
Пример использования символа подчеркивания.
SELECT prod_id, prod_name выбор столбцов
FROM Products из таблицы
WHERE prod_name LIKE ‘?? inch teddy bear*’; критерий поиска
--------------------------
prod_id prod_name
BR02 12 inch teddy bear
BR03 18 inch teddy bear
В результате будет выбраны только те строки, которые удовлетворяют шаблону поиска: по двум символам ? было найдено 12 и 18. Продукт 8 inch teddy bear не был найден, так как в шаблоне поиска требуется два совпадения, а не одно.
Для извлечения всех трех товаров можно использовать следующий запрос с шаблоном.
SELECT prod_id, prod_name выбор столбцов
FROM Products из таблицы
WHERE prod_name LIKE ‘* inch teddy bear*’; критерий поиска
--------------------------
prod_id prod_name
BR01 8 inch teddy bear
BR02 12 inch teddy bear
BR03 18 inch teddy bear
6.3. Метасимвол ”квадратные скобки” ([ ])
Метасимвол квадратные скобки используется для указания набора символов, каждый из которых должен совпадать со значением, причем точно в указанном месте. Не все СУБД поддерживают этот метасимвол. MS Access поддерживает этот метасимвол.
В примере требуется найти все контакты людей, имена которых начинаются на букву J или M.
SELECT cust_contact выбор столбцов
FROM Customers из таблицы
WHERE cust_contact LIKE ‘[JM]*’ критерий поиска
ORDER BY cust_contact; упорядочить по столбцу
--------------------------
cust_contact
Jim Jones
John Smith
Michelle Green
В шаблоне поиска используются два разных метасимвола. По метасимволам [JM] производится поиск всех контактных лиц, имена которых начинаются на одну из указанных в скобках букв, но при этом учитывается только один символ. По метасимволу *, следующему после [JM], производится поиск любого количества символов после первой буквы.
Можно использовать метасимвол, выполняющий противоположные действия, добавив перед ним символ ^. В MS Access вместо символа ^ используется !
В примере выбрать все имена, которые не начинаются с буквы J или M.
SELECT cust_contact выбор столбцов
FROM Customers из таблицы
WHERE cust_contact LIKE ‘[!JM]*’ критерий поиска
ORDER BY cust_contact; упорядочить по столбцу
Лекция "Протокол состояния связей OSPF" также может быть Вам полезна.
--------------------------
cust_contact
Denise L. Stephens
Kim Howard
Такого же результата можно достичь, воспользовавшись логическим оператором NOT. Преимуществом символа ^ (!) является более простой синтаксис при выполнении нескольких предложений WHERE.