Использование регулярных выражений в SQL Oracle

Работа с регулярными выражениями REGEXP в SQL под БД OracleВ Oracle Database 11g и 12c предлагается поддержка для регулярных выражений, которые можно использовать в виде части SQL-операторов. Регулярные выражения позволяют применять для манипуляций со строками или выполнения поиска специальные операции.

Раньше разработчикам приходилось применять в своих выражениях для выполнения поиска операции вроде  LIKE, REPLACE и SUBSTR. Однако при необходимости в реализации сложных типов поиска эти операции вынуждали их писать довольно длинные блоки кода SQL и PL/SQL. Oracle Database 11g теперь значительно облегчает эту задачу, позволяя использовать для выполнения сложных операций поиска и манипулирования строками регулярные выражения.


На заметку! Функциональные возможности регулярных выражений в Oracle соответствуют популярным стандартам POSIX.


 

В целом регулярное выражение предусматривает поиск в символьных строках определенных образцов. Символьная строка может относиться к типу CHAR, VARCHAR2, NCHAR или NVARCHAR2, а регулярное выражение — содержать одну из следующих функций:

  • REGEXP_LIKE
  • REGEXP_REPLACE
  • REGEXP_INSTRING
  • REGEXP_SUBSTRING

Функция REGEXP_LIKE вычисляет строки с использованием указанного набора символов. Она ищет в строке образец, указанный в параметре SOURCE_STRING. Переменная PATTERN представляет настоящее регулярное выражение, которое и является искомым образцом. Обычно регулярное выражение представляет собой текстовый литерал и может относиться к типу CHAR, VARCHAR2, NCHAR или NVARCHAR2 и достигать максимум 512 байт в длину. При желании может задаваться необязательный параметр сопоставления для изменения режима сопоставления. Например, параметр i указывает, что сопоставление с образцом должно выполняться без учета регистра, а параметр c — наоборот, с учетом регистра.

Ниже показан общий синтаксис функции REGEXP_LIKE

REGEXP_LIKE(исходная_строка, образец [, параметр_сопоставления])

Для манипулирования строками применяются встроенные функции REGEXP_INSTR, REGEXP_REPLACE и REGEXP_SUBSTR. Эти функции на самом деле являются расширениями обычных SQL-функций INSTR, REPLACE и SUBSTR.

В коде регулярных выражений могут применяться и такие типичные для программирования в UNIX и Perl символы, как точка (.), звездочка (*), знак вставки (^) и знак доллара ($). Знак вставки (^), например, указывает Oracle, что следующие за ним символы должны находиться в начале строки, а знак доллара ($) — что следующий за ним символ или ряд символов должны быть расположены в конце строки. Ниже приведен пример, в котором функция REGEXP_LIKE используется для извлечения всех имен, в которых содержатся указанные гласные: 

SQL> SELECT last_name
FROM employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i');
LAST_NAME
-----------
Freedman
Greenberg
Khoo
Gee
Lee
. . .
SQL>

Ниже приведен еще один пример, в котором функция REGEXP_LIKE применяется для быстрого нахождения сотрудников, которые были наняты на работу в период с 2000 по 2008 гг. 

SQL> SELECT emp_name, salary,
2 TO_CHAR(hire_date,'yyyy') year_of_hire
3 FROM emp
4* WHERE REGEXP_LIKE (TO_CHAR (hire_date, 'yyyy'), '^200[0-8]$');
LAST_NAME   FIRST_NAME  SALARY     YEAR
----------  ----------  ---------  ----
Austin      David       4800       2007
Chen        John        8200       2007
Alapati     Shannon     7700       2007
Baida       Shelli      2900       2007
Tobias      Sigal       2800       2007
Weiss       Matthew     8000       2007

Вас заинтересует / Intresting for you:

Назначение языка SQL и необход...
Назначение языка SQL и необход... 1434 просмотров Ирина Светлова Mon, 28 Oct 2019, 05:40:06
Операции SQL в базе данных Ora...
Операции SQL в базе данных Ora... 3869 просмотров Antoni Wed, 11 Apr 2018, 12:22:28
Операторы SQL для работы с баз...
Операторы SQL для работы с баз... 8222 просмотров sepia Mon, 16 Apr 2018, 13:56:44
Поддерживаемые Oracle типы сое...
Поддерживаемые Oracle типы сое... 15227 просмотров Дэн Mon, 16 Apr 2018, 14:21:48
Войдите чтобы комментировать

MaxNiko аватар
MaxNiko ответил в теме #9054 17 мая 2018 11:55
Реализация полноценных регулярных выражений в Oracle PL/SQL - это прорывной шаг. Удобства использования и качество создаваемого кода не неоспоримо! REGEXP рулят!