Оператори 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. Результат може бути таким: