8.6.2 INSTR
対象データ中の任意の文字列を検索し,その文字列の開始位置を返します。
対象データを検索する際,検索開始位置を指定できます。
また,例えば,対象データ中の'ABC'という文字列の開始位置を求める際,3番目に出現する'ABC'の開始位置を求めるなどの指定もできます。
- 〈この項の構成〉
(1) 指定形式
スカラ関数INSTR::=INSTR(対象データ,検索文字列〔,検索開始位置〔,出現回数〕〕) 対象データ::=値式 検索文字列::=値式 検索開始位置::=値式 出現回数::=値式
(2) 指定形式の説明
- 対象データ:
-
文字列を検索する対象データを指定します。
指定規則を次に示します。
-
対象データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
対象データには,CHAR型またはVARCHAR型のデータを指定してください。
-
対象データには,?パラメタを単独で指定できません。
-
- 検索文字列:
-
検索する文字列を指定します。
指定規則を次に示します。
-
検索文字列は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
検索文字列には,CHAR型またはVARCHAR型のデータを指定してください。
-
検索文字列には,?パラメタを単独で指定できません。
-
- 検索開始位置:
-
対象データの検索開始位置を文字数単位で指定します。
-
検索開始位置に正の整数を指定した場合
対象データの先頭からの位置を意味し,その位置から順方向(右方向)に検索が行われます。例えば,検索開始位置に2を指定した場合,対象データの先頭2文字目から順方向(右方向)に検索が行われます。
(例)INSTR('AB01AB02AB03','AB',2) → 5
-
検索開始位置に負の整数を指定した場合
対象データの末尾からの位置を意味し,その位置から逆方向(左方向)に検索が行われます。例えば,検索開始位置に-2を指定した場合,対象データの末尾2文字目から逆方向(左方向)に検索が行われます。
(例1)INSTR('AB01AB02AB03','AB',-2) → 9
(例2)INSTR('AB01AB02AB03','AB',-4) → 9
上記の例の場合,検索開始位置にAがあり,末尾に向けてBが並んでいるため,実行結果に9が返ります。
指定規則を次に示します。
-
検索開始位置は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
検索開始位置には,INTEGER型,BIGINT型,またはSMALLINT型のデータを指定してください。
-
検索開始位置を省略した場合,1が仮定されます。
-
検索開始位置に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。
-
- 出現回数:
-
検索対象の文字列の出現回数を指定します。例えば,出現回数に3を指定した場合,対象データ中で3番目に出現する文字列の開始位置が返ります。
指定規則を次に示します。
-
出現回数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
出現回数には正の整数を指定してください。
-
出現回数には,INTEGER型,BIGINT型,またはSMALLINT型のデータを指定してください。
-
出現回数を省略した場合,1が仮定されます。
-
出現回数に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。
-
スカラ関数INSTRの実行結果の例を次に示します。
- (例)
-
-
INSTR('AB01AB02AB03','AB') → 1
上記の例の場合,検索文字列'AB'が,対象データの文字列の1文字目にあるため,1が返ります。
-
INSTR('AB01AB02AB03','AB',3) → 5
上記の例の場合,対象データの先頭3文字目から検索が始まります。検索文字列'AB'が,対象データの文字列の5文字目にあるため,5が返ります。
-
INSTR('AB01AB02AB03','AB',3,2) → 9
上記の例の場合,対象データの先頭3文字目から検索が始まります。また,出現回数に2を指定しているため,2つ目の'AB'の開始位置が返ります。2つ目の'AB'が,対象データの文字列の9文字目にあるため,9が返ります。
-
INSTR('AB01AB02AB03','AB',-2,3) → 1
上記の例の場合,対象データの末尾2文字目から先頭に向かって検索が始まります。また,出現回数に3を指定しているため,3つ目の'AB'の開始位置が返ります。3つ目の'AB'が,対象データの文字列の1文字目にあるため,1が返ります。
-
(3) 規則
-
実行結果の値の単位は文字数です。
-
検索開始位置の値に関係なく,対象データの先頭から(左から)の出現位置を実行結果の値として返します。
-
検索文字列に指定した文字列が見つからない場合,実行結果の値に0が返ります。
-
実行結果のデータ型はINTEGER型になります。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
次のどれかの場合,実行結果はナル値になります。
-
対象データ,検索文字列,検索開始位置,または出現回数のどれかがナル値の場合
-
検索開始位置に0を指定した場合
-
出現回数に0または負の値を指定した場合
-
-
対象データまたは検索文字列のどちらかが実長0バイトまたは実長0文字のデータの場合,実行結果の値は0になります。ただし,次の場合を除きます。
-
対象データまたは検索文字列のどちらかがナル値の場合
-
検索開始位置に0を指定した場合
-
出現回数に0または負の値を指定した場合
-
-
検索文字列に指定した文字列と対象データ中の文字列の比較は文字単位に行われます。この比較処理は,検索対象の文字列が出現回数に指定した回数見つかるか,または検索する文字列がなくなるまで実行されます。
(4) 例題
- 例題
-
表T1のC1列には,メールアドレスの情報が格納されています。メールアドレスの@より前にある文字列を抽出します。
SELECT LEFT("C1",INSTR("C1",'@')-1) FROM "T1"