文字列中の一部の文字取得
位置と文字数を指定して取得する
文字列中の文字を、文字数で指定して取得するには、SUBSTRを使用します。
SUBSTR(文字列, 開始位置, 取得文字数)
それではサンプルを見てみましょう。
以下のようなmemberテーブルがあります。
id | name |
---|---|
1 | 荒木太郎 |
2 | 井端次郎 |
name列から苗字のみを取得するためのSQLです。
1 |
SELECT SUBSTR(name, 1, 2) FROM member; |
上記を実行し、抽出された結果がこちらです。
SUBSTR(name, 1, 2) |
---|
荒木 |
井端 |
name列から苗字のみが抽出されました。
上記の場合「SUBSTR(name(name列の), 1(1文字目から), 2(2文字分))取得する。」という意味になります。
位置のみを指定して取得する
開始位置のみを指定した場合、指定位置以降の文字列をすべて取得します。
SUBSTR(文字列, 開始位置)
それではサンプルを見てみましょう。
以下のようなmemberテーブルがあります。
id | name |
---|---|
1 | 荒木太郎 |
2 | 井端次郎 |
name列から名前を取得するためのSQLです。
1 |
SELECT SUBSTR(name, 3) FROM member; |
上記を実行し、抽出された結果がこちらです。
SUBSTR(name, 3) |
---|
太郎 |
次郎 |
name列から名前のみ(正確には3文字目以降)が抽出されました。
上記の場合「SUBSTR(name(name列の), 3(3文字目以降を))取得する。」という意味になります。
位置のみを指定して取得する(RIGHTの代用)
OracleではRIGHT関数が使用できませんが、SUBSTRを使用して同様の処理を行うことが可能です。
開始位置に、文字列の終端からの文字数をマイナス符号をつけて記述します。
SUBSTR(文字列,-文字列の終端からの文字数)
それではサンプルを見てみましょう。
以下のようなmemberテーブルがあります。
id | name |
---|---|
1 | 荒木太郎 |
2 | 井端次郎 |
name列から名前を取得するためのSQLです。
1 |
SELECT SUBSTR(name, -2) FROM member; |
上記を実行し、抽出された結果がこちらです。
SUBSTR(name, 3) |
---|
太郎 |
次郎 |
name列から名前のみ(正確には文字列の終端から2文字)が抽出されました。
上記の場合「SUBSTR(name(name列の), -2(終端から2文字を))取得する。」という意味になります。
バイト数を指定して取得する
SUBSTRは「文字数指定」での取得でしたが、SUBSTRB関数を使用することで、「バイト数指定」での取得も可能です。
SUBSTRBの使い方はSUBSTRと同様ですが、漢字のような2バイト文字に対してSUBSTR(文字列, 1, 1)等を指定をすると値が取得できないため注意が必要です。
また、データベースのキャラクタセット(データベース内で扱う文字コード)によっても、文字のバイト数が異なります。
例えば、JA16SJIS環境では2バイトですが、AL32UTF8環境では3バイトとなっています。
以上が、文字列中の文字の取得関数「SUBSTR」の使い方です。
便利ですので、ぜひ参考にしてみてください。