SUBSTRB スカラー関数

SUBSTRB 関数は、ストリング内の指定された位置から始まる、ストリングのサブストリングを戻します。 長さはバイト単位で計算されます。

Read syntax diagramSkip visual syntax diagramSUBSTRB(string, start,length)

スキーマは SYSIBM です。

SUBSTRB 関数は、バージョン 9.7 フィックスパック 1 から使用可能です。

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

この式は、組み込みの文字ストリング、数値、ブール値、または日時値の値を返す必要があります。 文字ストリングでない値は、関数の評価の前に VARCHAR に暗黙的にキャストされます。 Unicode データベースでは、値が GRAPHIC データ・タイプの場合、関数が評価される前に暗黙的に文字ストリング・データ・タイプにキャストされます。 この式のサブストリングは、この式における任意の数 (ゼロ以上) の連続バイトで構成されます。

start
string 内の結果サブストリングが始まる開始位置を指定する式。 式は、組み込みデータ・タイプである数値、CHAR、VARCHAR、GRAPHIC、VARGRAPHIC のいずれかの値を戻す必要があります。 値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。

start が正の場合、開始位置はストリングの先頭から計算されます。 startstring の長さよりも大きい場合は、長さゼロのストリングが戻されます。

start が負の場合、開始位置はストリングの末尾から逆方向にカウントして計算されます。 start の絶対値が string の長さよりも大きい場合は、長さゼロのストリングが戻されます。

start が 0 の場合は、開始位置として 1 が使用されます。

length
結果の長さをバイト単位で指定する式。 指定する場合、式は組み込みデータ・タイプである数値、CHAR、VARCHAR、GRAPHIC、VARGRAPHIC のいずれかの値を戻す必要があります。 値がタイプ INTEGER でない場合、その値は関数を評価する前に暗黙的に INTEGER にキャストされます。
length の値を次の場合に分けて処理方法を説明します。
  • ストリングの開始位置から末尾までのバイト数より大きい場合、結果の長さは最初の引数の長さから開始位置を引いて 1 を加えた値になります
  • ゼロ以下の場合、SUBSTRB の結果は長さゼロのストリングになります

length のデフォルトは、start で指定された位置から string の最後のバイトまでのバイト数です。

結果

string が CHAR または VARCHAR データ・タイプの場合、関数の結果は VARCHAR データ・タイプになります。 string が CLOB の場合、この関数の結果も CLOB です。 string が BINARY または VARBINARY データ・タイプの場合、関数の結果は VARBINARY データ・タイプになります。 string が BLOB の場合、この関数の結果も BLOB です。 バイナリー・ストリングでも FOR BIT DATA 文字ストリングでもないホスト変数が最初の引数である場合、結果のコード・ページはセクション・コード・ページになります。それ以外の場合は、最初の引数のコード・ページになります。

startlength の両方の引数が指定されて定数と定義されていなければ、結果の長さ属性は最初の引数の長さ属性と同じになります。 このような場合、結果の長さ属性は以下のように決まります。
  • length がゼロ以下の定数の場合、結果の長さ属性はゼロになります。
  • start が定数でなく length が定数の場合、結果の長さ属性は、最初の引数の長さ属性と length の長さ属性のうちの最小値になります。
  • start が定数であり length が定数でないか指定されていない場合、結果の長さ属性は、最初の引数の長さ属性から開始位置を引いて 1 を加えた値になります。
  • startlength が定数の場合、結果の長さ属性は以下のうちの最小値になります。
    • length
    • 最初の引数の長さ属性から開始位置を引いて 1 を加えた値。

SUBSTRB 関数のいずれかの引数が NULL 値の可能性がある場合、 結果も NULL 値になる可能性があります。 いずれかの引数が NULL 値の場合、結果は NULL 値になります。

  • 動的 SQL では、stringstart、および length を、パラメーター・マーカーで表すことができます。 string にパラメーター・マーカーが使用されると、 オペランドのデータ・タイプは VARCHAR になり、 オペランドは NULL 可能になります。
  • 前記の結果定義では明確には述べられていませんが、この意味体系は、string が 1 バイト文字/マルチバイト文字混合ストリングの場合、startlength の値によっては、結果にマルチバイト文字のフラグメントが入る可能性があるということを暗黙に示しています。 例えば、場合によっては、結果がマルチバイト文字の 2 番目のバイトから始まったり、マルチバイト文字の最初のバイトで終わったりする可能性があります。 SUBSTRB 関数はこうした部分的な文字を検出し、不完全な文字の各バイトを単一のブランク文字に置き換えます。
  • SUBSTRB は既存の SUBSTR 関数に似ていますが、以下の例外があります。
    • SUBSTRB は、処理をストリングの末尾から開始することを表す負の start 値をサポートします。
    • SUBSTRB では、length を計算結果の長さよりも大きくすることができます。 この場合は、エラーが戻されるのではなく、指定値よりも短いストリングが戻されます。
    • SUBSTRB の最初の引数では、GRAPHIC 入力データがネイティブにサポートされているわけではありません。 Unicode データベースでは GRAPHIC データがサポートされますが、まず文字データに変換されてから関数が評価され、長さはバイト単位で計算されます。
    • 入力データ・タイプが CHAR の場合、SUBSTRB の結果データ・タイプは VARCHAR になります。
    • SUBSTRB の結果の長さ属性は、最初の引数の長さ属性と同じになるか、あるいは start または length 属性に基づいて導き出されます (これらのどちらかが定数の場合)。

  • 例 1: ホスト変数 NAME (VARCHAR(50)) の値が 'BLUE JAY' で、 ホスト変数 SURNAME_POS (INTEGER) の値が 6 と想定します。
       SUBSTRB(:NAME, :SURNAME_POS)
    値 'JAY' が戻されます。
       SUBSTRB(:NAME, :SURNAME_POS,1)
    この例では 'J' の値を戻します。
  • 例 2: PROJECT 表から、'ING' で終わるすべての行を選択します。
       SELECT * FROM PROJECT
          WHERE SUBSTRB(PROJNAME,-3) = 'ING'