4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle SUBSTR・SUBSTRB関数で文字列を切り取る

Posted at

今回はORACLEデータベースのSQLで、SUBSTR・SUBSTRB関数を使って文字列の一部を切り取る方法を紹介します。

文字数で切り取る(SUBSTR)

SUBSTR関数は、文字列を指定した開始位置から指定位置文字数分を切り出します。

SUBSTR関数の基本構文は以下の通りです。

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

引数の文字列に対して、指定した開始位置から指定した文字数分の文字列を切り出します。
引数の切り取り文字数は省略可能で、その場合は開始位置から最後まで切り出します。
また、開始位置からの文字数が値の長さをオーバーしてもエラーにはならずにNULLを取得します。

SUBSTR関数を使ったSQLのサンプル

ここからは実際にSUBSTR関数を使ったSQLのサンプルを紹介します。

次のSQLでは、文字列の値を先頭から1文字を切り取っています。

--先頭の文字から1文字取得する場合
SELECT SUBSTR(abcde,1,1) FROM DUAL;

[結果] 'a'

次のSQLでは、文字列の値を指定した3文字以降を全て切り取っています。

--文字列の指定桁(3)以降を取得する場合
SELECT SUBSTR(abcde,3) FROM DUAL;

[結果] 'cde'

SUBSTR関数では、文字列の後ろから指定した文字数分の文字列を抽出することが出来ます。
次のSQLでは、文字列の値を後ろから3文字目の値から最後尾の文字まで切り取っています。

--後ろから3番目の文字から最後尾の文字まで取得する場合
select SUBSTR(abcde,-3) FROM DUAL;

[結果] 'cde'

バイト数で切り取る(SUBSTRB)

SUBSTRB関数は、文字列の指定桁数から指定バイトを切り取ります。
SUBSTRB関数の基本構文は以下の通りです。

SUBSTRB(文字列,  開始位置, バイト数)

使用方法はSUBSTR関数と同じです。

SUBSTRB関数を使ったSQLのサンプル

SUBSTRB関数を使ったSQLのサンプルを紹介します。

--SUBSTRBで切り取る 
SELECT SUBSTRB('山田太郎',1,2) FROM DUAL;

[結果] '山'

SELECT SUBSTRB('12345',1,2) FROM DUAL;

[結果] '12'

「SUBSTRB(‘山田太郎’,1,2)」は全角「佐藤太郎」の1バイト目から2バイトを切り取ります。2バイトで切り取るので漢字では1文字が返されます。

「SUBSTRB(‘12345’,1,2)」は「12345」の1バイト目から2バイトを切り取ります。

SUBSTRB関数で文字列を切り取りできないパターン

SUBSTRB関数で文字列を切り取りできないパターンについても紹介します。

--SUBSTRBで切り取りできない 
SELECT SUBSTRB('山田太郎',1,1) FROM DUAL;

[結果] ''

「SUBSTRB(‘山田太郎’,1,1)」は全角「山田太郎」の1バイト目から1バイトを切り取ります。
この場合、「山」から1バイト切り取ることはできないので結果は返されませんでした。

まとめ

以上、Oracleで文字列で切り取るSUBSTR・SUBSTRB関数でした。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?