instr関数は、第一引数で指定した文字列中から、第二引数で指定した文字列を検索し、その先頭文字位置を返す関数です。
第一引数、第二引数ともに文字でもかまいません。例えば
select instr('aaa','a') as a
from dual;
というようなSQLを発行した場合、結果は以下のようになります。
a
--------
1
では次のようなSQLの結果はどうなるでしょうか。
select instr('aaa','aa')
from dual;
結果は以下のようになります。
a
--------
1
これは先頭文字の位置を返すためです。
次に、第一引数で指定した文字列中に、第二引数で指定した文字列が存在しない場合、例えば以下のようなSQLの場合、
select instr('aaa','b')
from dual;
結果は、
0 になります。
instr関数は第三引数を指定することもできます。第三引数は開始位置を指定する引数で、第三引数を指定しなければ開始位置はデフォルトで1となります。
以下は開始位置を指定したSQL文とその結果です。
select instr('aaa','a',2) as aa
from dual;
aa
--------
2
対象文字列が
aba だった場合、文字列最後のaを指定したい場合があります。
その場合は第四引数を使用して、何番目にある文字列かを指定できます。abaの場合、2番目に出ていますので
select instr('aba','a',1,2) as aa
from dual;
aa
--------
3
というように最後のaの位置を返します。