Оператори LIKE та REGEXP_LIKE у запитах Oracle SQL, символи % та _, регулярні вирази у запитах

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_namelike'R%';

У цьому прикладі last _ name після ключового слова where це стовпець, з якого беруться строкові значення для перевірки, а 'R %' - це умова для перевірки. Відмінною особливістю оператора LIKE є те, що він може включати вумова спеціальні підстановочні символи (метасимволи). Для цього оператора передбачено лише два підстановочні символи:

  • % — представляє будь-яку послідовність із нуля або більше символів. При цьому значення '%' ніколи не буде рівним NULL (для перевірки таких значень використовується IS NULL );
  • _ - представляє будь-який одиночний символ.

У нашому прикладі ми використовували символ підстановки %, тому запит поверне всіх співробітників, чиє прізвище починається на R .

Якщо ми хочемо, щоб символ відсотка (%) і підкреслення (_) сприймалися Oracle як звичайні символи, за якими можна здійснювати пошук (а не як службові символи підстановки), у нашому розпорядженні — параметр ESCAPE . За допомогою цього параметра можна визначити спеціальний символ, після якого символ підстановки буде вважатися звичайним:

select last_name from hr.employees where last_namelike'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(vph)en$');

У цьому прикладі ми повертаємо інформацію про всіх співробітників, у яких ім'я починається на Ste, закінчується на en, а між ними знаходиться або v, або ph. Результат може бути таким: