文字列関数

[Oracle] 文字列関数 文字列中の文字取得SQL(SUBSTR)

文字列中の一部の文字取得

位置と文字数を指定して取得する

文字列中の文字を、文字数で指定して取得するには、SUBSTRを使用します。

SUBSTR(文字列, 開始位置, 取得文字数)

それではサンプルを見てみましょう。
以下のようなmemberテーブルがあります。

id name
1 荒木太郎
2 井端次郎

name列から苗字のみを取得するためのSQLです。

上記を実行し、抽出された結果がこちらです。

SUBSTR(name, 1, 2)
荒木
井端

name列から苗字のみが抽出されました。
上記の場合「SUBSTR(name(name列の), 1(1文字目から), 2(2文字分))取得する。」という意味になります。

 

位置のみを指定して取得する

開始位置のみを指定した場合、指定位置以降の文字列をすべて取得します。

SUBSTR(文字列, 開始位置)

それではサンプルを見てみましょう。
以下のようなmemberテーブルがあります。

id name
1 荒木太郎
2 井端次郎

name列から名前を取得するためのSQLです。

上記を実行し、抽出された結果がこちらです。

SUBSTR(name, 3)
太郎
次郎

name列から名前のみ(正確には3文字目以降)が抽出されました。
上記の場合「SUBSTR(name(name列の), 3(3文字目以降を))取得する。」という意味になります。

 

位置のみを指定して取得する(RIGHTの代用)

OracleではRIGHT関数が使用できませんが、SUBSTRを使用して同様の処理を行うことが可能です。
開始位置に、文字列の終端からの文字数をマイナス符号をつけて記述します。

SUBSTR(文字列,-文字列の終端からの文字数)

それではサンプルを見てみましょう。
以下のようなmemberテーブルがあります。

id name
1 荒木太郎
2 井端次郎

name列から名前を取得するためのSQLです。

上記を実行し、抽出された結果がこちらです。

SUBSTR(name, 3)
太郎
次郎

name列から名前のみ(正確には文字列の終端から2文字)が抽出されました。
上記の場合「SUBSTR(name(name列の), -2(終端から2文字を))取得する。」という意味になります。
 

バイト数を指定して取得する

SUBSTRは「文字数指定」での取得でしたが、SUBSTRB関数を使用することで、「バイト数指定」での取得も可能です。

SUBSTRBの使い方はSUBSTRと同様ですが、漢字のような2バイト文字に対してSUBSTR(文字列, 1, 1)等を指定をすると値が取得できないため注意が必要です。

また、データベースのキャラクタセット(データベース内で扱う文字コード)によっても、文字のバイト数が異なります。
例えば、JA16SJIS環境では2バイトですが、AL32UTF8環境では3バイトとなっています。

 
 
以上が、文字列中の文字の取得関数「SUBSTR」の使い方です。
便利ですので、ぜひ参考にしてみてください。