Top > SQL 関数一覧 (O‐S) > SUBSTR、SUBSTRB

文字列の編集、部分文字列を取り出す

syntax

SUBSTR ( string , position [, length] )
SUBSTRB ( string , position [, length] )
return [ string ]

parameter

string対象の文字列
position
 ├ 正の場合取り出したい文字列の開始位置(1〜)
 ├ 0 の場合1を指定したことと同じ
 └ 負の場合文字の末尾から逆向きに数えた位置
length取り出す文字列長default 最後まで

return

  • 抽出した部分文字列 (Substring)

avail

  • SQL および PL/SQL の両方で使用可能。

SUBSTR、SUBSTRB 関数の内容

SUBSTR は取り出す文字列をキャラクタ単位、 SUBSTRB はバイト単位で部分文字列の取り出しを行なう。
文字列 string の 開始位置 position から legnth 文字、または、バイト分 の部分文字列 (SUBSTRING) を戻す。

開始位置 position は 1 オリジンで始まるが 0 でも有効で 1 を指定したことになる。また、開始位置 position にマイナス値を指定すると文末から position 逆行した位置から文字列を取り出す。

文字列長 length を省略すると文字の最後までが対象となり、0 以下の数値も指定できるが結果は常に NULL を戻す。

BASIC にあるような左から length 文字 (left) 、右から length 文字 (right) のような個別の関数は用意されていない。

SUBSTR と SUBSTRB 以外にも同じ目的で各国語キャラクタセットに使用する特定のコードポイント向けの関数がある。

  • SUBSTRC : 完全な Unicode 用
  • SUBSTR2 : UCS2 用
  • SUBSTR4 : UCS4 用

注意点

SUBSTRB の場合には漢字などのマルチバイト文字の途中から取り出すとバイト単位に切り分けた文字化けするバイトコードが戻るというわけではなくスペース(' ') が代替抽出される。マニュアルではこの点について説明されていない。未来のバージョンまで、この振る舞いが保証はされていないと考えておかないと将来バグになる可能性がある。
このような場合を文字の 泣き別れ と呼ばれることがある。(泣き別れは、川の分水界のこと)

SUBSTR、SUBSTRB 使用例

開始位置 position のみを指定した場合(結果を見やすくするために半角スペースを '_' に加工している)

SQL> select s, str, SUBSTR(str,s) sub_str, SUBSTRB(str,s) sub_strb
  2   from substr_sample;
 
   S STR              SUB_STR          SUB_STRB
---- ---------------- ---------------- ----------------
   1 ひらがな         ひらがな         ひらがな
   0 ABC              ABC              ABC
   2 ハンカク カタカナ        ンカク カタカナ         ンカク カタカナ
   2 全角キャラクタ   角キャラクタ     _角キャラクタ
   1 バイト           バイト           バイト
  -3 日本語           日本語           _語

開始位置 position と文字列長 length を指定した場合

SQL> select s, e, str, SUBSTR(str,s,e) sub_str, SUBSTRB(str,s,e) sub_strb
  2   from substr_sample;
 
   S    E STR              SUB_STR          SUB_STRB
---- ---- ---------------- ---------------- ----------------
   1    5 ひらがな         ひらがな         ひら_
   0    5 ABC              ABC              ABC
   2    2 ハンカク カタカナ        ンカ               ンカ
   2    3 全角キャラクタ   角キャ           _角
   1    2 バイト           バイ             バ
  -3    1 日本語           日               _  ← 「本」の右半分

コード長について Shift-JIS 環境において半角カタカナは1バイトであるが EUC-JP では 2バイト UTF-8 では 3バイトになる。
UTF8 では全角文字一般が 3バイト 詳しくは 文字コードについて 参照

 


SQL 関数 - SUBSTR,SUBSTRB 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)