Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / SQL и PL/SQL в Oracle10g
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

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 является то, что он может включать в условие специальные подстановочные символы (метасимволы). Для этого оператора предусмотрено только два подстановочных символа:

  • %  — представляет любую последовательность из нуля или более символов. При этом значение '%' никогда не будет равно NULL (для проверки таких значений используется IS NULL);
  • _ — представляет любой одиночный символ.

В нашем примере мы использовали подстановочный символ %, поэтому запрос вернет всех сотрудников, чья фамилия начинается на 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

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru