【Oracle】INSTR・INSTRB で文字列が含まれる位置を検索する

文字列が含まれる位置を検索するINSTR・INSTRB

Oracleで文字列が含まれる位置を検索するにはINSTR・INSTRBを使います。

構文

INSTR(文字列,検索文字)

「INSTR」で文字列から検索文字が何文字目にあるか検索します。

INSTR(文字列,検索文字,開始位置,回数)

開始位置を指定することもできます。文字列の開始位置から検索文字が何文字目にあるか検索します。回数は検索文字が何回目にあるかを指定します。

INSTRB(文字列,開始桁,切り取りバイト数)

「INSTRB」で文字列から検索文字が何バイト目にあるか検索します。

INSTR(文字列,検索文字,開始位置,回数)

開始位置を指定することもできます。文字列の開始位置から検索文字が何バイト目にあるか検索します。回数は検索文字が何回目にあるかを指定します。

文字列の中にある文字が含まれているか?を検索するときに使うのがINSTR・INSTRBです。

 

例1. INSTRで文字列を検索するパターン

--INSTRで文字を探す 
SELECT INSTR('佐藤太郎','太') FROM DUAL;
[結果]
3

「佐藤太郎」から「太」を検索し、3文字目が検索できました。

--INSTRで文字を探せないパターン
SELECT INSTR('ABC','D') FROM DUAL; 
[結果]
0

対象文字列にない文字を検索した場合は0が取得されます。

例2. INSTRで文字列の指定桁以降を切り取るパターン

--INSTRで文字を探す(3文字目以降)
SELECT INSTR('ABCABCABC','B',3,1) FROM DUAL;
[結果]
5

第3パラメータを「3」とし3文字目以降を検索するようにしました。3文字目以降で「B」が存在するのは5文字目となります。

例3. INSTRBで文字列を検索するパターン

--INSTRBで文字を探す 
SELECT INSTRB('佐藤太郎','太') FROM DUAL; 
[結果]
5

--INSTRBで文字を探す 
SELECT INSTRB('ABC','B') FROM DUAL; 
[結果] 
2

INSTRBでは何バイト目にあるか?を探します。全角も対応しています。

例4. INSTRBで指定桁以降を切り取るパターン

--INSTRBで文字を探す(3バイト目以降) 
SELECT INSTR('あいうえおあいうえお','い',3,1) FROM DUAL; 
[結果] 
3

SELECT INSTR('あいうえおあいうえお','い',4,1) FROM DUAL; 
[結果] 
13

開始桁を指定する場合、全角のバイト数に注意が必要です。最初のSQLでは3バイト目に「い」が存在するため、最初の「い」がある位置「3」を取得しました。

2つ目のSQLで、開始位置「4」とすると2回目に位置「13」を取得しました。全角は注意が必要です。

以上、Oracleで文字列が含まれる位置を検索するINSTR・INSTRBでした。

コメント