8.10.2 SUBSTRB
バイナリデータの任意の位置から一部のバイナリデータを抽出します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数SUBSTRB::=SUBSTRB(抽出元のバイナリデータ,開始位置 〔,抽出バイト数〕) 抽出元のバイナリデータ::=値式 開始位置::=値式 抽出バイト数::=値式
(2) 指定形式の説明
- 抽出元のバイナリデータ:
-
抽出元のバイナリデータを指定します。
指定規則を次に示します。
-
抽出元のバイナリデータは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
抽出元のバイナリデータには,BINARY型またはVARBINARY型のデータを指定してください。
-
抽出元のバイナリデータには,?パラメタを単独で指定できません。
-
- 開始位置:
-
バイナリデータの抽出開始位置を,バイト数単位で指定します。
開始位置に0以上の値を指定した場合は,抽出元のバイナリデータの先頭からの位置を意味します。例えば,開始位置に2を指定した場合,先頭2バイト目から抽出を始めるという意味になります。
開始位置に負の値を指定した場合は,抽出元のバイナリデータの末尾からの位置を意味します。例えば,開始位置に-2を指定した場合,末尾2バイト目から抽出を始めるという意味になります。
指定規則を次に示します。
-
開始位置は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
開始位置には,整数(INTEGER型またはSMALLINT型のデータ)を指定してください。
-
開始位置に0を指定した場合,1が指定されたと仮定されます。
-
開始位置に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。
-
- 抽出バイト数:
-
抽出するバイナリデータの長さを指定します。
指定規則を次に示します。
-
抽出バイト数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
抽出バイト数には,0以上の整数(INTEGER型またはSMALLINT型のデータ)を指定してください。
-
抽出バイト数に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。
-
スカラ関数SUBSTRBの実行結果の例を次に示します。
- (例)
-
-
バイナリデータX'ABCDEF1234567890'の先頭2バイト目から3バイト分のデータを抽出します。
SUBSTRB(X'ABCDEF1234567890',2,3) → X'CDEF12'
-
バイナリデータX'ABCDEF1234567890'の末尾3バイト目から2バイト分のデータを抽出します。
SUBSTRB(X'ABCDEF1234567890',-3,2) → X'5678'
-
(3) 規則
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
次に示す場合,実行結果はナル値になります。
-
抽出バイト数が負の値の場合(抽出元のバイナリデータ,開始位置の指定に関係なくナル値になります)
-
抽出元のバイナリデータ,開始位置,または抽出バイト数のどれかがナル値の場合
-
-
実行結果のデータ型とデータ長を次の表に示します。
表8‒36 スカラ関数SUBSTRBの実行結果のデータ型とデータ長 抽出元のバイナリデータのデータ型とデータ長
実行結果のデータ型とデータ長
BINARY(n)
VARBINARY(n)
VARBINARY(n)
(凡例)n:抽出元のバイナリデータの最大長
-
スカラ関数SUBSTRBによって抽出されるバイナリデータのバイト数を次の表に示します。
表8‒37 スカラ関数SUBSTRBによって抽出されるバイナリデータのバイト数 スカラ関数SUBSTRBの指定
抽出されるバイナリデータのバイト数
抽出バイト数の指定
開始位置の指定値
指定あり
正の値
MAX{0,MIN(抽出バイト数,抽出元のバイナリデータのバイト数−開始位置+1)}
0
MIN(抽出バイト数,抽出元のバイナリデータのバイト数)
負の値
MIN(抽出バイト数,開始位置の絶対値,抽出元のバイナリデータのバイト数)
省略
正の値
MAX(0,抽出元のバイナリデータのバイト数−開始位置+1)
0
抽出元のバイナリデータのバイト数
負の値
MIN(開始位置の絶対値,抽出元のバイナリデータのバイト数)
-
次に示す場合,実行結果は実長0バイトのデータになります。
-
実行結果のバイナリデータの長さが0の場合
-
抽出元のバイナリデータが実長0バイトの場合
-
開始位置に次の値を指定した場合
開始位置>抽出元のバイナリデータのバイト数
開始位置<−抽出元のバイナリデータのバイト数
-
-
「抽出元のバイナリデータの開始位置以降のバイナリデータのバイト数<抽出バイト数」の場合,抽出元のバイナリデータの開始位置以降のすべてのバイナリデータを返します。
(例)
SUBSTRB(X'ABCDEF',2,5) → X'CDEF'