POSIX 正規表現規格、Unicode Regular Expression Guidelineに準拠するということですが、要は普通に正規表現を使えるということです。
正規表現を利用できる機能は以下の4つです。
【条件】
REGEXP_LIKE
【関数】
REGEXP_INSTR
REGEXP_SUBSTR
REGEXP_REPLACE
REGEXP_LIKE
LIKE 条件の正規表現版です。書式は以下のとおりです。
REGEXP_LIKE(source_string,pattern[,match_parameter]) source_string : 検索する対象の文字列 pattern : 正規表現 match_parameter : 一致動作を決定するパラメータ
以下のように使用します。
SQL> select ename from emp where regexp_like(ename, '(.)\1'); ENAME -------------------- ALLEN SCOTT MILLER
REGEXP_INSTR
INSTR の正規表現版です。書式は以下のとおりです。
REGEXP_INSTR(source_string,pattern[,position[,occurence[,return_option[,match_parameter]]]]) source_string : 検索する対象の文字列 pattern : 正規表現 position : 検索開始位置を示す整数 occurence : 何番目に一致するものを対象とするかを示す整数 return_option : 戻り値として返す文字の位置 match_parameter : 一致動作を決定するパラメータ
以下のように使用します。
SQL> select ename, regexp_instr(ename, '(.)\1') from emp; ENAME REGEXP_INSTR(ENAME,'(.)\1') -------------------- --------------------------- SMITH 0 ALLEN 2 WARD 0 JONES 0 MARTIN 0 BLAKE 0 CLARK 0 SCOTT 4 KING 0 TURNER 0 ADAMS 0 JAMES 0 FORD 0 MILLER 3
REGEXP_SUBSTR
SUBSTR の正規表現版です。書式は以下のとおりです。
REGEXP_SUBSTR(source_string,pattern[,position[,occurence[,match_parameter]]]) source_string : 検索する対象の文字列 pattern : 正規表現 position : 検索開始位置を示す整数 occurence : 何番目に一致するものを対象とするかを示す整数 match_parameter : 一致動作を決定するパラメータ
以下のように使用します。
SQL> select ename, regexp_substr(ename, '(.)\1') from emp; ENAME REGEXP_SUBSTR(ENAME,'(.)\1') -------------------- ------------------------------ SMITH ALLEN LL WARD JONES MARTIN BLAKE CLARK SCOTT TT KING TURNER ADAMS JAMES FORD MILLER LL
REGEXP_REPLACE
REPLACE の正規表現版です。書式は以下のとおりです。
REGEXP_SUBSTR(source_string,pattern[,position[,occurence[,match_parameter]]]) source_string : 検索する対象の文字列 pattern : 正規表現 replace_string : 置換文字列(正規表現への後方参照を使用することができます。) position : 検索開始位置を示す整数 occurence : 何番目に一致するものを対象とするかを示す整数 match_parameter : 一致動作を決定するパラメータ
以下のように使用します。
SQL> select ename, regexp_replace(ename, '(.)\1','\1') from emp; ENAME REGEXP_REPLACE(ENAME,'(.)\1','\1') -------------------- ----------------------------------- SMITH SMITH ALLEN ALEN WARD WARD JONES JONES MARTIN MARTIN BLAKE BLAKE CLARK CLARK SCOTT SCOT KING KING TURNER TURNER ADAMS ADAMS JAMES JAMES FORD FORD MILLER MILER
使用例が適切かどうかはさておき、以上のように正規表現を使用した検索や置換を行うことができるというわけです。
これらの条件や関数は正規表現を使えるという点以外は元となる条件や関数とほぼ同じです。
だったら、元の条件や関数で正規表現を使えるようにしてくれればいいのにと思わなくもないですが、そうすると正規表現として扱う意図がないのに正規表現として扱われてしまうことによる誤動作も起こりそうなので、こういう実装が現実的なのでしょう。
いずれにせよ、正規表現を使用できるようになったことで、SQLでできる処理の幅がぐんと広がることは確かです。
積極的に利用して損はないと思われます。