この記事では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 のように条件指定することができます。