SUBSTR4 スカラー関数
スキーマは SYSIBM です。
- string
- 結果のサブストリングを取り出すストリングを指定する式。 式は、組み込み文字ストリング、グラフィック・ストリング、数値、日時のいずれかのデータ・タイプの値を戻す必要があります。 文字ストリングに FOR BIT DATA 属性は設定できません (SQLSTATE 428GC)。 値がストリング・データ・タイプでない場合、その値は関数を評価する前に 暗黙的に VARCHAR にキャストされます。string のサブストリングは、string のゼロ以上の連続ストリング単位です。
- start
- 結果のサブストリングを開始する string 内の開始位置を 32 ビットの UTF-32 ストリング単位で指定する式。
式は、組み込みデータ・タイプである数値、CHAR、VARCHAR、GRAPHIC、VARGRAPHIC のいずれかの値を戻す必要があります。値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。
start が正の場合、開始位置はストリングの先頭から計算されます。 start が 32 ビットの UTF-32 ストリング単位の string の長さよりも大きい場合には、長さゼロのストリングが戻されます。
start が負の場合、開始位置はストリングの末尾から逆方向にカウントして計算されます。 start の絶対値が 32 ビットの UTF-32 ストリング単位の string の長さより大きい場合、長さゼロのストリングが戻されます。
start が 0 の場合、開始位置として 1 が使用されます。
- length
- 結果のサブストリングの長さを 32 ビットの UTF-32 ストリング単位で指定する式。length を指定する場合、式は組み込む数値、CHAR、VARCHAR、GRAPHIC、VARGRAPHIC のいずれかのデータ・タイプの値を戻す必要があります。
値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。
length の値がストリングの開始位置から末尾までの 32 ビットの UTF-32 ストリング単位の数よりも大きい場合、結果のサブストリングの長さは、32 ビットの UTF-32 ストリング単位の最初の引数の長さから開始位置を引いて 1 を加えた長さになります。
length の値がゼロ以下の場合、結果は長さゼロのストリングになります。
length のデフォルト値は、start で指定された位置から string の最後のストリング単位までの CODEUNITS32 の数です。
| ストリング引数 | 開始引数 1 | 長さ引数 | 結果の長さ属性 2 |
|---|---|---|---|
| 長さ属性 A を持つ文字タイプ | 任意の有効な引数 | 定数値 L<=0 | 0 |
| 長さ属性 A を持つ文字タイプ | 定数値 S および |(S)|>A | 指定しない、または任意の有効な引数 | 0 |
| 長さ属性 A を持つ文字タイプ | 定数以外 | 定数値 L>0 | string のストリング単位が
OCTETS である場合は MIN(A, L×4) string のストリング単位が CODEUNITS32 である場合は MIN(A, L) |
| 長さ属性 A を持つ文字タイプ | 定数値 S>0 | 指定しない、または定数以外 | A-S+1 |
| 長さ属性 A を持つ文字タイプ | 定数値 S<0 | 指定しない、または定数以外 | string のストリング単位が
OCTETS である場合は MIN(A, |(S)×4|) string のストリング単位が CODEUNITS32 である場合は MIN(A, |S|) |
| 長さ属性 A を持つ文字タイプ | 定数値 S>0 | 定数値 L>0 | string のストリング単位が
OCTETS である場合は MIN(A-S+1, L×4) string のストリング単位が CODEUNITS32 である場合は MIN(A-S+1, L) |
| 長さ属性 A を持つ文字タイプ | 定数値 S<0 | 定数値 L>0 | string のストリング単位が
OCTETS である場合は MIN(A,|(S)×4|, L×4) string のストリング単位が CODEUNITS32 である場合は MIN(A, |S|, L) |
| 長さ属性 A を持つグラフィック・タイプ | 任意の有効な引数 | 定数値 L<=0 | 0 |
| 長さ属性 A を持つグラフィック・タイプ | 定数値 S および |(S)|>A | 指定しない、または任意の有効な引数 | 0 |
| 長さ属性 A を持つグラフィック・タイプ | 定数以外 | 定数値 L>0 | string のストリング単位が 2 バイトまたは CODEUNITS16 である場合は MIN(A, L*2) string のストリング単位が CODEUNITS32 である場合は MIN(A, L) |
| 長さ属性 A を持つグラフィック・タイプ | 定数値 S>0 | 指定しない、または定数以外 | A-S+1 |
| 長さ属性 A を持つグラフィック・タイプ | 定数値 S<0 | 指定しない、または定数以外 | string のストリング単位が 2 バイトまたは
CODEUNITS16 である場合は MIN(A, |(S) * 2|) string のストリング単位が CODEUNITS32 である場合は MIN(A, |S|) |
| 長さ属性 A を持つグラフィック・タイプ | 定数値 S>0 | 定数値 L>0 | string のストリング単位が 2 バイトまたは CODEUNITS16 である場合は MIN(A-S+1, L*2) string のストリング単位が CODEUNITS32 である場合は MIN(A-S+1, L) |
| 長さ属性 A を持つグラフィック・タイプ | 定数値 S<0 | 定数値 L>0 | string のストリング単位が 2 バイトまたは
CODEUNITS16 である場合は MIN(A, |(S)*2|, L*2) string のストリング単位が CODEUNITS32 である場合は MIN(A, |S|, L) |
注:
1 開始引数に値 0 を指定する場合、この表を参照する際には S に値 1 を使用してください。 2 一部の文字結果タイプの結果の長さ属性には、係数 4 が乗算される定数が含まれています。この乗数は、ストリング単位が OCTETS の文字データ・タイプの長さ属性で使用するため、32 ビット UTF-32 ストリング単位のカウントからバイト単位のカウントに切り替えるために 4 を乗算することで生じる最悪の場合の拡張をカバーします。 |
|||
注
- string に結合文字が含まれている場合、結果には、開始と長さの値に応じて、結合文字のない基本文字または基本文字のない結合文字が含まれる可能性があります。
- SUBSTR4 は SUBSTR 関数に似ていますが、以下の例外があります。
- SUBSTR4 は、処理をストリングの末尾から開始することを示す負の開始値をサポートしています。
- SUBSTR4 は、計算結果の長さよりも大きい length 値をサポートしています。 その場合、短い方のストリングが戻され、エラーは戻されません。
- SUBSTR4 は、入力データ・タイプが CHAR の場合にはデータ・タイプ VARCHAR を結果として戻します。入力タイプが GRAPHIC の場合には、VARGRAPHIC が結果として戻されるデータ・タイプです。
- SUBSTR4 の結果の長さ属性は、最初の引数の長さ属性と同じになるか、あるいは、開始属性または長さ属性に基づいて導出されます (どちらかが定数の場合)。
- SUBSTR4 は、最初の引数の長さ属性と同じ長さ属性を結果として戻します。 ただし、開始引数または長さ引数が定数として指定されている場合は例外です。定数を指定すると、結果の長さ属性は開始属性または長さ属性に基づいて導出されます (上の表を参照)。
