|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.4.7 Поиск по шаблонам с использованием метасимволов. Операторы LIKE и REGEXP_LIKEОператоры LIKE и REGEXP_LIKE в запросах Oracle SQL, символы % и _, регулярные выражения в запросах Очень часто в практической работе возникает необходимость провести поиск по набору символов в любом месте столбца — например, для поиска всех записей с названиями товаров, содержащими какое-либо слово, или для поиска какого-либо слова как в единственном, так и во множественном числе. Для этой цели в Oracle SQL можно использовать оператор LIKE (его можно использовать и в SQL Server) и оператор REGEXP_LIKE (этого оператора в SQL Server не предусмотрено). Сразу скажем, что LIKE и REGEXP_LIKE используются только в относительно простых ситуациях. Если вам нужно производить поиск с учетом грамматики, фильтрации шумовых слов и т.п., то следует подумать о применении полнотекстового поиска. Оператор LIKE используется для поиска символьных значений по шаблону со специальными подстановочными символами (метасимволами). Отметим, что в Oracle предусмотрено четыре разновидности этого оператора: · "обычный" LIKE — применяется для запроса к строковым столбцам с традиционными кодировками; · LIKEC — применяется для столбцов с кодировкой Unicode (в терминологии Oracle — Unicode complete); · LIKE2 — для кодировки UCS2; · LIKE4 — для кодировки UCS4. Пример применения этого оператора может выглядеть так: select last_name from hr.employees where last_name like 'R%'; В этом примере last_name после ключевого слова where — это столбец, из которого берутся строковые значения для проверки, а 'R%' — это условие для проверки. Отличительной особенностью оператора LIKE является то, что он может включать в условие специальные подстановочные символы (метасимволы). Для этого оператора предусмотрено только два подстановочных символа:
В нашем примере мы использовали подстановочный символ %, поэтому запрос вернет всех сотрудников, чья фамилия начинается на R. Если мы хотим, чтобы символ процента (%) и подчеркивания (_) воспринимались Oracle как обычные символы, по которым можно производить поиск (а не как служебгные подстановочные символы), в нашем распоряжении — параметр ESCAPE. При помощи этого параметра можно определить специальный символ, после которого подстановочный символ будет считаться обычным: select last_name from hr.employees where last_name like 'R\%' ESCAPE '\'; В нашем примере мы определили символ \ в качестве отмены подстановочного значения, и если у нас найдется сотрудник с фамилией R%, то запрос его обязательно вернет. Чаще всего для символа отмены подстановочного значения используется обратный слэш (\) — наиболее привычное значение для программистов на C, однако вы вполне можете использовать любой символ, определив его при помощи ESCAPE. Условие LIKE использовать совсем несложно, но и набор возможностей у него очень ограничен. Намного большие функциональные возможности предоставляет условие REGEXP_LIKE, которое позволяет определять условие поиска при помощи стандартных POSIX-совместимых регулярных выражений. Регулярные выражения — очень большая тема, которая выходит за рамки этого учебного курса. Полную справку по регулярным выражениям, поддерживаемым Oracle, можно посмотреть в приложении C книги SQL Reference документации Oracle. Здесь же мы приведем только простой пример: SELECT first_name FROM employees WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$'); В этом примере мы возвращаем информацию о всех сотрудниках, у которых имя начинается на Ste, заканчивается на en, а между ними находится либо v, либо ph. Результат может быть таким: Steven Steven Stephen
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||