Hitachi

Hitachi Advanced Data Binder SQLリファレンス


8.6.2 INSTR

対象データ中の任意の文字列を検索し,その文字列の開始位置を返します。

対象データを検索する際,検索開始位置を指定できます。

また,例えば,対象データ中の'ABC'という文字列の開始位置を求める際,3番目に出現する'ABC'の開始位置を求めるなどの指定もできます。

〈この項の構成〉

(1) 指定形式

スカラ関数INSTR::=INSTR(対象データ,検索文字列〔,検索開始位置〔,出現回数〕〕)
 
  対象データ::=値式
  検索文字列::=値式
  検索開始位置::=値式
  出現回数::=値式

(2) 指定形式の説明

対象データ

文字列を検索する対象データを指定します。

指定規則を次に示します。

  • 対象データは,値式の形式で指定します。値式については,「7.20 値式」を参照してください。

  • 対象データには,CHAR型またはVARCHAR型のデータを指定してください。

  • 対象データには,?パラメタを単独で指定できません。

検索文字列

検索する文字列を指定します。

指定規則を次に示します。

  • 検索文字列は,値式の形式で指定します。値式については,「7.20 値式」を参照してください。

  • 検索文字列には,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.20 値式」を参照してください。

  • 検索開始位置には,INTEGER型またはSMALLINT型のデータを指定してください。

  • 検索開始位置を省略した場合,1が仮定されます。

  • 検索開始位置に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。

出現回数

検索対象の文字列の出現回数を指定します。例えば,出現回数3を指定した場合,対象データ中で3番目に出現する文字列の開始位置が返ります。

指定規則を次に示します。

  • 出現回数は,値式の形式で指定します。値式については,「7.20 値式」を参照してください。

  • 出現回数には正の整数を指定してください。

  • 出現回数には,INTEGER型または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) 規則

  1. 実行結果の値の単位は文字数です。

  2. 検索開始位置の値に関係なく,対象データの先頭から(左から)の出現位置を実行結果の値として返します。

  3. 検索文字列に指定した文字列が見つからない場合,実行結果の値に0が返ります。

  4. 実行結果のデータ型はINTEGER型になります。

  5. 実行結果の値は,非ナル値制約なし(ナル値を許す)となります。

  6. 次のどれかの場合,実行結果はナル値になります。

    • 対象データ検索文字列検索開始位置,または出現回数のどれかがナル値の場合

    • 検索開始位置0を指定した場合

    • 出現回数0または負の値を指定した場合

  7. 対象データまたは検索文字列のどちらかが実長0バイトまたは実長0文字のデータの場合,実行結果の値は0になります。ただし,次の場合を除きます。

    • 対象データまたは検索文字列のどちらかがナル値の場合

    • 検索開始位置0を指定した場合

    • 出現回数0または負の値を指定した場合

  8. 検索文字列に指定した文字列と対象データ中の文字列の比較は文字単位に行われます。この比較処理は,検索対象の文字列が出現回数に指定した回数見つかるか,または検索する文字列がなくなるまで実行されます。

(4) 例題

例題

T1C1列には,メールアドレスの情報が格納されています。メールアドレスの@より前にある文字列を抽出します。

SELECT LEFT("C1",INSTR("C1",'@')-1) FROM "T1"

[図データ]