SQLクリニック(1) Page 2/2

Oracle 10gの正規表現で文字列操作を極める


株式会社インサイトテクノロジー
大道隆久
2005/2/24

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操作に関する機能の追加ですが、知っていると大変便利です。ぜひ活用してみてはいかがでしょうか。(次回に続く)

@IT関連記事
Insider.NETフォーラム
基礎解説 スマートな文字列処理のための正規表現入門

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

  2/2  

 Index
連載 SQLクリニック(1)
Oracle 10gの正規表現で文字列操作を極める
  Page 1
・Oracle 10gで正規表現による文字列操作が可能に!
・Oracle10gで追加された新しい関数
 −1.REGEXP_LIKE関数
Page 2
 −2.REGEXP_INSTR関数
 −3.REGEXP_SUBSTR関数
 −4.REGEXP_REPLACE関数
・正規表現のさまざまな活用方法


SQLクリニック

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH