SQL 解説書

SUBSTR

>>-SUBSTR--(--string--,--start----+-------------+--)-----------><
                                  '-,--length---'
 

スキーマは SYSIBM です。

SUBSTR 関数は、ストリングのサブストリングを戻します。

string が文字ストリングの場合、関数の結果は、 その最初の引き数のコード・ページで示された文字ストリングになります。 2 進ストリングの場合には、関数の結果も 2 進ストリングになります。 漢字ストリングの場合は、 関数の結果も最初の引き数のコード・ページで示された漢字ストリングになります。 SUBSTR 関数のいずれかの引き数がヌル値の可能性がある場合、 結果もヌル値になる可能性があります。 いずれかの引き数がヌル値の場合、結果はヌル値になります。

string
結果を取り出すストリングを指定する式。

string が文字ストリングまたは 2 進ストリングの場合、 string のサブストリングは、 ゼロ個以上の連続したバイトからなるストリング になります。 string が漢字ストリングの場合、string のサブストリングは、 ゼロ個以上の連続する 2 バイト文字からなるストリング になります。

start
結果の最初のバイト位置 (文字ストリングまたは 2 進ストリングの場合)、 あるいは結果の最初の文字の位置 (漢字ストリングの場合) を指定する式。 start は、string が固定長か可変長かに応じて、 1 から string の最大長までの整数でなければなりません (この範囲外の場合は SQLSTATE 22011)。 データベース・コード・ページの文脈内にあるバイト数として指定しなければなりません。 アプリケーション・コード・ページの文脈で指定してはなりません。

length
結果の長さを指定する式。 この式を指定する場合、 length は、0 〜 n の範囲の 2 進整数でなければなりません。 ただし、n は、 (string の長さ属性) - start + 1 です (その範囲外の場合は SQLSTATE 22011)。

length を明示的に指定した場合、 string の右側には必要な数のブランク文字 (文字ストリングの場合は 1 バイト、 漢字ストリングの場合は 2 バイト) が効率的に付加されて、 string のうちの指定したサブストリングが常に存在するようにされます。 length のデフォルト値は、 文字ストリングまたは 2 進ストリングの場合は、 start で指定されたバイト位置から string の最後のバイト位置までのバイト数、 漢字ストリングの場合には、 start で指定された文字位置から string の最後の文字位置までの 2 バイト文字の数です。 ただし、string が可変長ストリングで、 その長さが start 未満の場合、デフォルト値はゼロになり、 結果は空ストリングになります。 データベース・コード・ページの文脈内にあるバイト数として指定しなければなりません。 アプリケーション・コード・ページの文脈で指定してはなりません。 (たとえば、データ・タイプ VARCHAR(18)、値 'MCKNIGHT' の列 NAME の場合、 SUBSTR(NAME,10) では空ストリングが戻されます) 。

表 16 に、入力のタイプと属性ごとに、 SUBSTR 関数の結果タイプと長さがどうなるかを示しています。

表 16. SUBSTR の結果のデータ・タイプと長さ
ストリング引き数のデータ・タイプ 長さ引き数 結果のデータ・タイプ
CHAR(A) 定数 (l<255) CHAR(l)
CHAR(A) 指定しない。start 引き数は定数 CHAR(A-start+1)
CHAR(A) 定数以外 VARCHAR(A)



VARCHAR(A) 定数 (l<255) CHAR(l)
VARCHAR(A) 定数 (254<l<32673) VARCHAR(l)
VARCHAR(A) 定数以外、または指定しない。 VARCHAR(A)



LONG VARCHAR 定数 (l<255) CHAR(l)



LONG VARCHAR 定数 (254<l<4001) VARCHAR(l)
LONG VARCHAR 定数 (l>4000) LONG VARCHAR
LONG VARCHAR 定数以外、または指定しない。 LONG VARCHAR



CLOB(A) 定数 (l) CLOB(l)
CLOB(A) 定数以外、または指定しない。 CLOB(A)



GRAPHIC(A) 定数 (l<128) GRAPHIC(l)
GRAPHIC(A) 指定しない。start 引き数は定数 GRAPHIC(A-start+1)
GRAPHIC(A) 定数以外 VARGRAPHIC(A)



VARGRAPHIC(A) 定数 (l<128) GRAPHIC(l)
VARGRAPHIC(A) 定数 (127<l<16337) VARGRAPHIC(l)
VARGRAPHIC(A) 定数以外 VARGRAPHIC(A)



LONG VARGRAPHIC 定数 (l<128) GRAPHIC(l)
LONG VARGRAPHIC 定数 (127<l<2001) VARGRAPHIC(l)
LONG VARGRAPHIC 定数 (l>2000) LONG VARGRAPHIC
LONG VARGRAPHIC 定数以外、または指定しない。 LONG VARGRAPHIC



DBCLOB(A) 定数 (l) DBCLOB(l)
DBCLOB(A) 定数以外、または指定しない。 DBCLOB(A)



BLOB(A) 定数 (l) BLOB(l)
BLOB(A) 定数以外、または指定しない。 BLOB(A)



string が固定長ストリングの場合に length を省略すると、 暗黙に LENGTH(string) - start + 1 が指定されます。 string が可変長ストリングの場合に length を省略すると、 暗黙にゼロまたは LENGTH(string) - start + 1 のいずれか大きい方が指定されます。

例:

注:

  1. 動的 SQL では、stringstart、および length が、 パラメーター・マーカー (?) によって表される場合があります。 string にパラメーター・マーカーが使用されると、 オペランドのデータ・タイプは VARCHAR になり、 オペランドはヌル値可になります。

  2. 上記の結果定義には明確には述べられていませんが、 string が 1 バイト文字 / 多重バイト文字混合ストリングの場合、 startlength の値によっては、 結果に多重バイト文字の断片が含まれることになる場合があります。 つまり、結果が 2 バイト文字の 2 番目のバイトから始まったり、 2 バイト文字の最初のバイトで終わったりする可能性があるということです。 SUBSTR 関数は、このような断片化の検出を行わず、 またこのような断片化があっても特別な処理は何も行われません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]