# SUBSTR関数

関数

    SUBSTR{START[,SIZE[,ADJUST]]}

関数処理の対象文字列から、引数STARTで指定された位置から引数SIZEで指定したバイト数分の文字列を返します。

= 備考 =

SUBSTR関数の処理（引数STARTが正の場合）は、出力情報で開始位置と出力サイズの指定した場合の処理と類似していますが、以下の点が異なります。

- 対象文字列がNタイプの場合、次に示す処理の違いがあります。

  - 出力情報で指定した場合は、シフトコードを付加する前に文字列を処理します。

  - SUBSTR関数の場合は、シフトコードを付加した後に文字列を処理します。

- 出力情報で指定した場合の処理は開始位置を1から数えますが、SUBSTR関数の処理の場合は開始位置を0から数えます。

パラメータ

START

開始位置を数値（0、負の値も可）で指定します（省略不可）。

正の場合（0を含む）：

  先頭から数えてSTARTに指定した開始位置から、末尾に向けてSIZEバイトの文字列を返します。

  (例)

  文字列「abcdef」の場合、開始位置0は「a」、開始位置2は「c」です。

  開始位置が対象文字列の文字列長を超える場合は、0バイトの文字列を返します。

負の場合：

  末尾から数えてSTARTに指定した開始位置から、末尾に向けてSIZEバイトの文字列を返します。開始位置が対象文字列の文字列長を超える場合は、先頭から数えて文字列を返します。

SIZE

取り出したいバイト数を指定します（省略可）。

省略すると、開始位置からすべての文字列を返します。

0または負の数値を指定した場合は実行時エラーとなります。

開始位置からの対象文字列がSIZEバイトを満たさず、SIZEバイト分取り出せない場合は、途中まで取り出した文字列を返します（エラーになりません）。

ADJUST

可変長文字（Mタイプ、CSV文字列、XML文字列）の開始位置、終了位置を調整します（省略可）。

省略すると、可変長文字の開始位置と終了位置は調整しません。

表A.13 可変長文字の開始、終了位置

設定値 | 設定内容
--- | ---
LL | 開始位置が１つの文字コードの途中の場合は開始位置を先頭方向(左)にずらします。 終了位置が１つの文字コードの途中の場合は終了位置を先頭方向(左)にずらします。
LR | 開始位置が１つの文字コードの途中の場合は開始位置を先頭方向(左)にずらします。 終了位置が１つの文字コードの途中の場合は終了位置を末尾方向(右)にずらします。
RL | 開始位置が１つの文字コードの途中の場合は開始位置を末尾方向(右)にずらします。 終了位置が１つの文字コードの途中の場合は終了位置を先頭方向(左)にずらします。
RR | 開始位置が１つの文字コードの途中の場合は開始位置を末尾方向(右)にずらします。 終了位置が１つの文字コードの途中の場合は終了位置を末尾方向(右)にずらします。
上記以外 | エラーになります。

注意

開始位置が調整されてもサイズは変わりませんが、終了位置が調整された場合はサイズが変わります。

- 終了位置が先頭方向（左）にずれた場合：ずれた分だけサイズが減算されます。

- 終了位置が末尾方向（右）にずれた場合：ずれた分だけサイズが加算されます。

= 備考 =

- コード変換が実行されると、SIZEおよびADJUSTを設定してもサイズが変わることがあります。

- ADJUSTの設定で対応する入力コード種は、UTF-8、SHIFT-JIS、およびEUCだけです。それ以外の文字コードを入力するとエラーになります。

使用例

= 備考 =

この例で使用する文字コードは、SHIFT-JISとします。

1. 先頭から数えた開始位置1バイト目（末尾から数えて6バイト目）から3バイトの文字列を取り出します。

図A.42 使用例（SUBSTR関数(1)先頭指定）

図A.43 使用例（SUBSTR関数(1)末尾指定）

2. 先頭から数えた開始位置3バイト目（末尾から数えて4バイト目）からすべての文字列を取り出します。

図A.44 使用例（SUBSTR関数(2)先頭指定）

図A.45 使用例（SUBSTR関数(2)末尾指定）

3. 処理対象文字列が開始位置から引数SIZEバイトを満たさない場合、開始位置からすべての文字列を取り出します。

図A.46 使用例（SUBSTR関数(3)）

4. 引数STARTが正の値で、開始位置が文字列長を超えた場合、文字列は取り出されません。

図A.47 使用例（SUBSTR関数(4)）

5. 引数STARTが負の値で、開始位置が文字列長を超えた場合、先頭の文字列から取り出します。

図A.48 使用例（SUBSTR関数(5)）

6. ADJUSTにLLを指定し、先頭から数えた開始位置1バイト目から3バイトを取り出す指定の場合、開始位置が漢字の切れ目のため、文字の区切りまで左にずらします。終了位置が漢字の切れ目のため、終了位置を文字の区切りまで左にずらします。これによって、「あ」が取り出されます。

図A.49 使用例（SUBSTR関数(6)）

7. ADJUSTにLRを指定し、先頭から数えた開始位置1バイト目から3バイトを取り出す指定の場合、開始位置が漢字の切れ目のため、文字の区切りまで左にずらします。終了位置が漢字の切れ目のため、終了位置を文字の区切りまで右にずらします。これによって、「あ」「い」が取り出されます。

図A.50 使用例（SUBSTR関数(7)）

8. ADJUSTにRLを指定し、先頭から数えた開始位置1バイト目から3バイトを取り出す指定の場合、開始位置が漢字の切れ目のため、文字の区切りまで右にずらします。終了位置が漢字の切れ目のため、終了位置を文字の区切りまで左にずらします。これによって、「い」が取り出されます。

図A.51 使用例（SUBSTR関数(8)）

9. ADJUSTにRRを指定し、先頭から数えた開始位置1バイト目から3バイトを取り出す指定の場合、開始位置が漢字の切れ目のため、文字の区切りまで右にずらします。終了位置が漢字の切れ目のため、終了位置を文字の区切りまで右にずらします。これによって、「い」「う」が取り出されます。

図A.52 使用例（SUBSTR関数(9)）