Hitachi

Hitachi Advanced Data Binder SQLリファレンス


8.5.8 SUBSTR

文字データの任意の位置から一部の文字列を抽出します。

〈この項の構成〉

(1) 指定形式

スカラ関数SUBSTR::=SUBSTR(抽出元の文字データ,開始位置〔,抽出文字数〕)
 
  抽出元の文字データ::=値式
  開始位置::=値式
  抽出文字数::=値式

(2) 指定形式の説明

抽出元の文字データ

抽出元の文字データを指定します。

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

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

  • 抽出元の文字データには,CHAR型またはVARCHAR型のデータを指定してください。

  • 抽出元の文字データには,?パラメタを単独で指定できません。

開始位置

文字データの抽出開始位置を,文字数単位で指定します。

開始位置に0以上の値を指定した場合は,抽出元の文字データの先頭からの位置を意味します。例えば,開始位置に2を指定した場合,先頭2文字目から抽出を始めるという意味になります。

開始位置に負の値を指定した場合は,抽出元の文字データの末尾からの位置を意味します。例えば,開始位置に-2を指定した場合,末尾2文字目から抽出を始めるという意味になります。

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

  • 開始位置は,値式の形式で指定します。値式については,「7.20 値式」を参照してください。

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

  • 開始位置に0を指定した場合,1が指定されたと仮定されます。

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

抽出文字数

抽出する文字数を指定します。

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

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

  • 抽出文字数には,0以上の整数(INTEGER型またはSMALLINT型のデータ)を指定してください。

  • 抽出文字数を省略した場合,抽出元の文字データがCHAR型のときは,開始位置から定義長の最後の文字までを抽出します。抽出元の文字データがVARCHAR型のときは,開始位置から実データの最後の文字までを抽出します。

  • 抽出文字数に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。

スカラ関数SUBSTRの実行結果の例を次に示します。

(例)
  • 文字列'ABCDEF'の先頭2文字目から3文字分のデータを抽出します。

    SUBSTR('ABCDEF',2,3) → 'BCD'

  • 文字列'ABCDEF'の末尾3文字目から2文字分のデータを抽出します。

    SUBSTR('ABCDEF',-3,2) → 'DE'

(3) 規則

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

  2. 次に示す場合,実行結果はナル値になります。

    • 抽出文字数が負の値の場合(抽出元の文字データ,開始位置の指定に関係なくナル値になります)

    • 抽出元の文字データ,開始位置,または抽出文字数のどれかがナル値の場合

  3. 実行結果のデータ型とデータ長を次の表に示します。

    表8‒18 スカラ関数SUBSTRの実行結果のデータ型とデータ長

    抽出元の文字データのデータ型とデータ長

    実行結果のデータ型とデータ長

    CHAR(n)

    VARCHAR(n)

    VARCHAR(n)

    (凡例)n:抽出元の文字データの最大長

  4. スカラ関数SUBSTRによって抽出される文字数を次の表に示します。

    表8‒19 スカラ関数SUBSTRによって抽出される文字数

    スカラ関数SUBSTRの指定

    抽出される文字数

    抽出文字数の指定

    開始位置の指定値

    指定あり

    正の値

    MAX{0,MIN(抽出文字数抽出元の文字データの文字数−開始位置+1)}

    0

    MIN(抽出文字数抽出元の文字データの文字数

    負の値

    MIN(抽出文字数開始位置の絶対値抽出元の文字データの文字数

    省略

    正の値

    MAX(0,抽出元の文字データの文字数開始位置+1)

    0

    抽出元の文字データの文字数

    負の値

    MIN(開始位置の絶対値抽出元の文字データの文字数

  5. 次に示す場合,実行結果は実長0バイトのデータになります。

    • 実行結果の文字列の長さが0の場合

    • 抽出元の文字データが実長0バイトまたは実長0文字の場合

    • 開始位置に次の値を指定した場合

      開始位置抽出元の文字データの文字数

      開始位置<−抽出元の文字データの文字数

  6. 「抽出元の文字データの開始位置以降の文字数<抽出文字数」の場合,抽出元の文字データの開始位置以降のすべての文字データを返します。

    (例)

    SUBSTR('ABCDEF',5,3) → 'EF'

(4) 例題

例題1

T1C1列のデータで,先頭2文字目から3文字分のデータが'150'の行を検索します。

SELECT * FROM "T1"
    WHERE SUBSTR("C1",2,3)='150'

[図データ]

例題2

T1C1列のデータで,末尾2文字目から2文字分のデータが'01'の行を検索します。

SELECT * FROM "T1"
    WHERE SUBSTR("C1",-2,2)='01'

[図データ]