SUBSTRING スカラー関数
SUBSTRING 関数は、ストリングのサブストリングを戻します。
スキーマは SYSIBM です。
- expression
- 結果を取り出すストリングを指定する式。この式は、組み込みの文字ストリング、数値、ブール値、または日時値を返す必要があります。
文字ストリングでない値は、関数の評価の前に VARCHAR に暗黙的にキャストされます。
入力式のサブストリングは、入力式における、連続したゼロ個以上のストリング単位で構成されます。
- start
- サブストリングを計算する起点となる、入力式の先頭からの相対位置を指定する式。
例:
- 位置 1 は、入力式における 1 番目のストリング単位です。
ステートメント
SUBSTRING('abc',1,2)は'ab'を返します。 - 位置 2 は、位置 1 から右に 1 つ目の位置です。ステートメント
SUBSTRING('abc',2,2)は'bc'を返します。 - 位置 0 は、位置 1 から左に 1 つ目の位置です。ステートメント
SUBSTRING('abc',0,2)は'a'を返します。 - 位置 -1 は、位置 1 から左に 2 つ目の位置です。ステートメント
SUBSTRING('abc',-1,2)は、長さゼロのストリングを返します。
start には正、負、またはゼロの値を指定できます。OCTETS が指定され、入力式に GRAPHIC データが含まれる場合、start の値は奇数でなければなりません (SQLSTATE 428GC)。
- 位置 1 は、入力式における 1 番目のストリング単位です。
ステートメント
- length
- 結果の長さを指定する式。
この式は、組み込みの数値、CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC の値を返す必要があります。
値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。
入力式に応じて以下のようになります。
- 固定長ストリングの場合、デフォルトの長さは
CHARACTER_LENGTH(expression USING string-unit) - start + 1です。 これは、入力式の開始位置から最終位置までの、ストリング単位 (CODEUNITS16、CODEUNITS32、または OCTETS) の数です。 - 可変長ストリングの場合、デフォルトの長さは、ゼロまたは
CHARACTER_LENGTH(expression USING string-unit) - start + 1のいずれか大きい方です。
値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。 値はゼロ以上でなければなりません。n より大きい値が指定される場合、n が結果のサブストリングの長さとして使用されます。ここで、n は (expression の長さ属性) - start + 1 です。値は、明示的に指定されたストリング単位で表現されます。 OCTETS が指定され、入力式に GRAPHIC データが含まれる場合、長さは偶数でなければなりません (SQLSTATE 428GC)。
- 固定長ストリングの場合、デフォルトの長さは
- CODEUNITS16、CODEUNITS32、または OCTETS
- start および length のストリング単位を指定します。CODEUNITS16 は、start および length を 16 ビットの UTF-16 コード単位で表すことを指定します。
CODEUNITS32 は、start および length を 32 ビットの UTF-32 コード単位で表すことを指定します。
OCTETS は、start および length をバイト単位で表すことを指定します。
ストリング単位が CODEUNITS16 または CODEUNITS32 と指定され、expression がバイナリー・ストリングまたは FOR BIT DATA ストリングである場合は、エラーが戻されます (SQLSTATE 428GC)。
ストリング単位引数が指定されておらず、expression が FOR BIT DATA 以外の文字ストリングであるか、グラフィック・ストリングである場合、デフォルトは CODEUNITS32 です。それ以外の場合、デフォルトは OCTETS です。
CODEUNITS16、CODEUNITS32、および OCTETS の詳細については、『文字ストリング』の『組み込み関数のストリング単位』を参照してください。
SUBSTRING 関数が OCTETS を使用して呼び出され、source-string がコード・ポイントごとに複数のバイトを必要とするコード・ページでエンコードされる場合 (混合または MBCS)、SUBSTRING 操作は、マルチバイト・コード・ポイントを分割し、結果のサブストリングは部分的なコード・ポイントで開始または終了する場合があります。 これが発生する場合、関数は結果のバイト長を変更しない仕方で、先頭または末尾の部分的コード・ポイントのバイトをブランクで置き換えます。 (『例』セクションで関連する例を参照)。
結果
結果のデータ・タイプは、次の表に示すように、最初の引数のデータ・タイプによって決まります。
| 最初の引数のデータ・タイプ | 結果のデータ・タイプ |
|---|---|
| CHAR または VARCHAR | VARCHAR |
| CLOB | CLOB |
| GRAPHIC または VARGRAPHIC | VARGRAPHIC |
| DBCLOB | DBCLOB |
| BINARY または VARBINARY | VARBINARY |
| BLOB | BLOB |
結果の長さ属性は、入力式の長さ属性と同じになります。関数のいずれかの引数が NULL 値の可能性がある場合、結果も NULL 値になる可能性があります。 いずれかの引数が NULL 値の場合、結果は NULL 値になります。 結果にいずれかの文字が埋め込まれることはありません。 入力式の実際の長さが 0 である場合、結果の実際の長さも 0 になります。
注
- 結果の長さ属性は、入力式の長さ属性と同じになります。この動作は SUBSTR 関数の動作とは異なります。 その場合の長さ属性は、関数の start および length 引数から導出されます。
例
- 例 1: FIRSTNAME は、表 T1 の VARCHAR(12) 列です。
その値の 1 つは、6 文字のストリング
'Jürgen'です。FIRSTNAME が以下の値を持つ場合:関数 ... 戻り ... ------------------------------------ ------------------------------------ SUBSTRING(FIRSTNAME,1,2,CODEUNITS32) 'Jü' -- x'4AC3BC' SUBSTRING(FIRSTNAME,1,2,CODEUNITS16) 'Jü' -- x'4AC3BC' SUBSTRING(FIRSTNAME,1,2,OCTETS) 'J ' -- x'4A20' (切り捨てられたストリング) SUBSTRING(FIRSTNAME,8,CODEUNITS16) ゼロの長さのストリング SUBSTRING(FIRSTNAME,8,4,OCTETS) ゼロの長さのストリング SUBSTRING(FIRSTNAME,0,2,CODEUNITS32) 'J' -- x'4AC3BC' - 例 2: 以下では、ストリングの長さの単位が OCTETS の場合、SUBSTRING が先頭または末尾の部分的マルチバイト・コード・ポイントのバイトをブランクで置き換える例を示しています。
UTF8_VAR に Unicode ストリング '&N~AB' の UTF-8 表記が含まれていると想定します。
ここで '&' は音楽のト音記号、'~' は結合チルド記号文字です。
3 つのブランク・バイトが 'N' に先行し、1 つのブランク・バイトが 'N' に続きます。SUBSTRING(UTF8_VAR, 2, 5, OCTETS)
