SUBSTR スカラー関数

SUBSTR 関数は、ストリングのサブストリングを戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするSUBSTR( 文字列式, 開始, 長さ)

スキーマは SYSIBM です。

文字列式
結果を取り出すストリングを指定する式。 ストリングは、文字ストリング、グラフィック・ストリング、またはバイナリー・ストリングでな ければなりません。 string-expression が 文字ストリングの場合、この関数の結果は文字ストリングとなります。 グラフィック・ストリングの場合は、 この関数の結果はグラフィック・ストリングとなります。 バイナリー・ストリングの場合は、関数の結果はバイナリー・ストリングになります。

引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。

string-expression のサブストリングとは、string-expression の 0 個以上の連続した文字のことです。 string-expression がグラフィック・ストリングの場合 、1 文字は 1 つの DBCS 文字です。 string-expression が文字ストリングまたはバイナリー・ストリングの場合 、1 文字は 1 バイトです。 SUBSTR 関数は、MIXED データ・ストリングを受け入れ ます。 ただし、SUBSTR は厳密にバイト・カウントを基本として演算を 行うため、結果が必ず適正な形式の混合データ・ストリング になるとは限りません。

開始
結果の最初の文字となる、string-expression 内の位置を指定する式。 長精度整数値の範囲は 1 から string-expression の長さ属性でなければなりません。 (可変長ストリングの長さ属性は、その最大長です。) 値 1 は、サブストリングの最初の文字が string-expression の 最初の文字になることを示します。

引数を、文字ストリングまたはグラフィック・ストリングのデータ・タイプにすることもできます。 ストリング入力は、暗黙的に DECFLOAT(34) の数値にキャストされ、その後 INTEGER 値に割り当てられます。

長さ
結果のサブストリングの長さを指定する式。 指定する場合、length は組み込み長精度整数データ・タイプの値を戻す式であることが必要です。

引数を、文字ストリングまたはグラフィック・ストリングのデータ・タイプにすることもできます。 ストリング入力は、暗黙的に DECFLOAT(34) の数値にキャストされ、その後 INTEGER 値に割り当てられます。

この値は、0 以上 n 以下でなければなりません。ここで、nstring-expression - start + 1の長さ属性です。 ただし、指定する長さは、長整数定数 0 であってはなりません。

length を明示的に指定した場合、string-expression の指定されたサブストリングが必ず存在する ように、実際上は string-expression の右側に必要な数の文字が埋め込まれます。 string-expression がバイナリー・データの場合は、16 進のゼロを埋め込み文字として使用します。 そうでなければ、ブランクが埋め込み文字として使用されます。

string-expression が固定長ストリングの場合、length を省略すると、LENGTH(string-expression) - start + 1が暗黙的に指定されます。これは、string-expression の最後の文字 (またはバイト) までに指定された文字 (またはバイト) からの文字 (またはバイト) の数です。 string-expression が可変長ストリングの場合、長さを省略すると、ゼロまたはLENGTH(string-expression) - start + 1の大きい方が暗黙的に指定されます。 結果となる長さがゼロの場合、その結果は空ストリングです。

length を 255 以下の長精度整数定数によって明示的に指定した場合、string-expression が LOB でなければ、結果は固定長ストリングになり、その長さ属性は length です。 length が明示的に指定されていないが、string-expression が固定長ストリングであり、start が整数定数である場合、結果は、LENGTH(string-expression) - start + 1と等しい長さ属性を持つ固定長ストリングになります。 それ以外の場合はすべて、結果は可変長ストリングになります。 length を長精度整数定数によって明示的に指定した場合、結果の長さ属性は length です。そうでない場合、結果の長さ属性は string-expression の長さ属性と同じになります。

結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。

結果の CCSID は string-expression の CCSID です。

SUBSTRの例

  • 例1: FIRSTNMEは、サンプルテーブル DSN8C10.EMP のVARCHAR(12)カラムです。 FIRSTNME の値が「MAUDE」の場合:

       Function:                 Returns:
       -----------------------------------
       SUBSTR(FIRSTNME,2,3)      -- 'AUD'
       SUBSTR(FIRSTNME,2)        -- 'AUDE'
       SUBSTR(FIRSTNME,2,6)      -- 'AUDE' followed by two blanks
       SUBSTR(FIRSTNME,6)        -- a zero-length string
       SUBSTR(FIRSTNME,6,4)      -- four blanks
  • 例2: サンプルテーブル DSN8C10.PROJ には、VARCHAR(24)として定義されたPROJNAMEというカラムが含まれています。 その表から、PROJNAME 内のストリングが「W L PROGRAM」で始まる行をすべて選択します。

       SELECT * FROM DSN8C10.PROJ
         WHERE SUBSTR(PROJNAME,1,12) = 'W L PROGRAM ';

    テーブルには、 Db2 から提供された行のみが含まれていると仮定します。 この場合、PROJNAME の値が「W L PROGRAM DESIGN」である 1 行だけは、この述部は真となります。 PROJNAME の値が「W L PROGRAMMING」の行の場合、この述部は真になりません。述部のストリング定数内で「PROGRAM 」の後にブランクが 1 つ置かれているからです。

  • 例 3: my_loc という名前の LOB ロケーターは、長さが 1 ギガバイトの LOB 値を示しているとします。 LOB 値の最初の 50 バイトをホスト変数 PORTION に割り当てます。

       SET :PORTION = SUBSTR(:my_loc,1,50);
  • 例 4: ホスト変数 RESUME のデータ・タイプが CLOB で、従業員の履歴書を保持しているとします。 この例は、履歴書の部門情報に関する 部分を検出してそれをホスト変数 DeptBuf に割り当てる、いくつかのステートメントを示しています。 最初に、部門情報の開始位置と終了位置を検出するために 、POSSTR を使用します。 履歴書内では、部門情報はストリング「Department Information Section」で開始し、ストリング「Education Section」の直前で終了します。 次に、これらの開始位置と終了位置を指定して 、SUBSTR 関数を使用して、部門情報をホスト変数に割り当てます。

       SET :DInfoBegPos = POSSTR(:RESUME, 'Department Information Section');
       SET :DInfoEnPos = POSSTR(:RESUME, 'Education Section');
       SET :DeptBuf = SUBSTR(:RESUME, :DInfoBegPos, :DInfoEnPos - :DInfoBegPos);