SUBSTR - サブ文字列を抽出

SUBSTR 関数は、文字列内の開始位置および長さに基づいて、サブ文字列を抽出します。SUBSTR 関数は、他のフィールドの値に基づいてサブ文字列の位置を変更することができます。

サブ文字列を抽出

SUBSTR(length, source_string, start, end, sublength, output)

説明

length

整数

source_string で指定した文字列のバイト数です。長さが定義されたフィールドを指定することもできます。

source_string

文字

サブ文字列の抽出元となる文字列です。文字列は一重引用符 (') で囲みます。ソース文字列を含むフィールドを指定することもできます。

start

整数

ソース文字列内のサブ文字列の開始位置です。start の値が 1 より小さい場合、または length で指定した値より大きい場合、この関数はブランクを返します。

end

整数

抽出するサブ文字列の終了位置です。この引数が start より小さい、または length より大きい場合、この関数はブランクを返します。

sublength

整数

サブ文字列の長さです。この値は通常、end - start + 1 (end と start の値の差に 1 を加えたもの) です。sublength end - start +1 よりも大きい場合はサブ文字列の末尾にブランクが追加され、小さい場合はサブ文字列の末尾が切り捨てられます。この値は、output で宣言した長さに一致させる必要があります。sublength の長さ分の文字のみが処理されます。

output

文字

結果が返されるフィールド、または出力値のフォーマットです。フォーマットは一重引用符 (') で囲みます。

文字列を抽出

POSIT 関数は、LAST_NAME の 1 つ目の「I」の位置を特定し、結果を I_IN_NAME に格納します。その後、SUBSTR 関数は、LAST_NAME から「I」で開始する 3 バイトを抽出し、結果を I_SUBSTR に格納します。

TABLE FILE EMPLOYEE
PRINT
COMPUTE 
    I_IN_NAME/I2 = POSIT(LAST_NAME, 15, 'I', 1, 'I2'); AND
COMPUTE
    I_SUBSTR/A3 = 
    SUBSTR(15, LAST_NAME, I_IN_NAME, I_IN_NAME+2, 3, I_SUBSTR);
BY LAST_NAME
WHERE DEPARTMENT EQ 'PRODUCTION'
END

出力結果は次のとおりです。

LAST_NAME      I_IN_NAME  I_SUBSTR
---------      ---------  --------
BANNING                5  ING
IRVING                 1  IRV
MCKNIGHT               5  IGH
ROMANS                 0
SMITH                  3  ITH
STEVENS                0

ROMANS と STEVENS には「I」が含まれていないため、SUBSTR 関数はブランクの文字列を抽出します。