連載
» 2005年02月24日 00時00分 公開

Oracle 10gの正規表現で文字列操作を極めるSQLクリニック(1)(2/2 ページ)

[大道隆久,株式会社インサイトテクノロジー]
前のページへ 1|2       

2.REGEXP_INSTR関数

 次に、REGEXP_INSTR関数です。指定した正規表現に一致する部分が何文字目かを返します。

構文 REGEXP_INSTR(文字列または列名,条件)

SQL> SELECT COL1,REGEXP_INSTR(COL1,'[0-9]') ,
  2  REGEXP_INSTR(COL1,'%') from TEST_REGEXP;
COL1       REGEXP_INSTR(COL1,'[0-9]') REGEXP_INSTR(COL1,'%')
---------- -------------------------- ----------------------
ABCDE01234                         6                      0
01234ABCDE                         1                      0
@|=)(9&%$#                         6                      8
あいうえ3                           5                      0
6 rows selected.
リスト3 REGEXP_INSTRを使った指定文字の位置検索

 「N文字目以降に数字が出現するのは?」と制限する場合はこんな感じ。

SQL> SELECT COL1,REGEXP_INSTR(COL1,'[0-9]',4) FROM TEST_REGEXP;
COL1       REGEXP_INSTR(COL1,'[0-9]',4)
---------- ----------------------------
ABCDE01234                            6
01234ABCDE                            4
abcde01234                            6
01234abcde                            4
リスト4 N文字目以降に数字が出現するのは?

3.REGEXP_SUBSTR関数

 さらに、REGEXP_SUBSTR関数では、指定した正規表現に一致する部分を抜き出し結果として返します。

構文 REGEXP_SUBSTR(文字列または列名,条件)

SQL> SELECT COL1,REGEXP_SUBSTR(COL1,'[C-Z]+') FROM TEST_REGEXP;
COL1       REGEXP_SUBSTR(COL1,'[C-Z]')
---------- ---------------------------
ABCDE01234 CDE
01234ABCDE CDE
abcde01234
01234abcde
リスト5 指定したアルファベットをすべて切り出す場合は……
SQL> SELECT COL1,REGEXP_SUBSTR(COL1,'[C-Z]') FROM TEST_REGEXP;
COL1       REGEXP_SUBSTR(COL1,'[C-Z]')
---------- ---------------------------
ABCDE01234 C
01234ABCDE C
abcde01234
01234abcde
リスト6 該当する1文字のみを切り出す場合は……

4.REGEXP_REPLACE関数

 最後に、REGEXP_REPLACE関数。指定した正規表現に一致する部分を、指定した別の文字列に置き換えます。

構文 REGEXP_REPLACE(列名または文字列,条件,置き換え文字列)

SQL> SELECT COL1,REGEXP_REPLACE(COL1,'[0-2]+','*') FROM TEST_REGEXP;
COL1       REGEXP_REPLACE(COL1,'[0-2]+','*')
---------- --------------------------------------------------
ABCDE01234 ABCDE*34
01234ABCDE *34ABCDE
abcde01234 abcde*34
01234abcde *34abcde
リスト7 指定した部分の文字を別の文字に置換

正規表現のさまざまな活用方法

 SQL文で正規表現が可能になったことで、いままではちょっとした小細工(PL/SQLや条件式の羅列)が必要であった作業が簡単に実現できるようになりました。例えば電子メールや郵便番号(海外などでは英字も含まれる)格納列への検索・入力チェックも簡単です。そのほか、データベース移行時に問題となる外字の検出、不要な空白文字の検出、重複語の出現の識別および文字列の解析・置換などにも威力を発揮します。

 以上のように、Oracle10gでのちょっとしたSQL操作に関する機能の追加ですが、知っていると大変便利です。ぜひ活用してみてはいかがでしょうか。(次回に続く)

筆者紹介

株式会社インサイトテクノロジー

Oracleに特化した製品開発、コンサルティングを手掛けるエンジニア集団。大道隆久は緊迫したトラブル現場でも常に冷静沈着であり、スマートに解決へと導いていくシステムコンサルタント。



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。