INSTRで特定の文字列を検索する方法

この記事ではINSTR関数を使って特定の文字列を検索する方法を解説します。

 INSTR関数とは

INSTR関数は文字列から指定した文字列を検索し、最初に見つかった位置を取得する関数です。

検索する文字を含まない場合は「0」を返します。

構文は以下のようになります。

INSTR('文字列', '検索する文字列', [検索開始位置], [検索回数])

例えば文字列「Oracle Database」から文字列「rac」を検索すると、文字位置「2」が返されます。

SQL> SELECT INSTR('Oracle Database','rac') FROM DUAL;
INSTR('ORACLEDATABASE','RAC')
-----------------------------
                            2

検索開始位置は後ろから検索する場合は「-1」を検索回数は何個目の検索結果位置を返すかを指定します。

後ろから3番目の文字「a」を検索すると次のようになります。

SQL> SELECT INSTR('Oracle Database','a', -1, 3) FROM DUAL;
INSTR('ORACLEDATABASE','A',-1,3)
--------------------------------
                               9

Oracle D「a」tabaseのaの位置である9が返されました。


 使用例

Oracle Databaseにおいては監査などで条件を指定したい場合に、INSTRを使用することがあります。

条件句ではlikeを使用したり、正規表現を扱ったりすることができない場合が多いです。

その場合にINSTRを使用して疑似的に正規表現を扱うことができます。

例えば接続ユーザが「TEST」という文字列を含むかどうかをINSTR関数を使って判定できます。

SQL> show user
ユーザーは"TEST01"です。

SQL> SELECT instr(SYS_CONTEXT ('USERENV', 'SESSION_USER'),'TEST')  FROM DUAL;
INSTR(SYS_CONTEXT('USERENV','SESSION_USER'),'TEST')
---------------------------------------------------
                                                  1

検索する文字列を含んでいる場合は0より大きい数字を返すため、instr(SYS_CONTEXT ('USERENV', 'SESSION_USER'),'TEST') > 0 のように条件指定することができます。