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 以下でなければなりません。ここで、n はstring-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);
