【Oracle】SUBSTRで文字列を抽出する方法を解説!

スポンサーリンク

データベースで文字列を操作する機会は意外と多くあります。たとえば、社員コードの一部を取り出したり、メールアドレスからユーザー名だけを抽出したり、ログデータから特定の情報を切り出したりといった場面です。

Oracleデータベースでは、こうした文字列の一部を抽出する際に便利な関数として SUBSTR(サブストリング)関数が用意されています。
本記事では、SUBSTR関数の基本的な使い方から、INSTR関数との組み合わせによる応用的な活用方法まで、実例を交えてわかりやすく解説していきます。

「データの一部分だけ取り出したい」というニーズに対し、柔軟に対応できるようになることを目指しましょう。

基本構文の解説

OracleのSUBSTR関数は、文字列の中から指定した位置・長さの部分文字列を抽出するための関数です。構文は以下のようになります。

SUBSTR(文字列, 開始位置 [, 文字数])

それぞれの引数の意味は次の通りです。

引数説明
文字列抽出元となる文字列です。テーブルのカラムや文字列リテラルが使えます。
開始位置抽出を始める位置を1から数えた番号で指定します。
文字数(省略可)抽出する文字数。省略した場合は、開始位置から文字列の末尾までが対象になります。
SELECT SUBSTR('ABCDEFG', 2, 3) FROM DUAL;
-- 結果:'BCD'

この例では、「ABCDEFG」という文字列の2文字目から3文字分を取り出しており、結果は「BCD」になります。

開始位置に負の値を指定する場合

SUBSTRでは、開始位置に負の値を指定することも可能です。この場合、文字列の末尾から数えた位置になります。

SELECT SUBSTR('ABCDEFG', -3, 2) FROM DUAL;
-- 結果:'EF'

この例では、末尾から3文字目(’E’)を起点に2文字分(’E’と’F’)を抽出しています。

文字数を省略した場合

文字数を省略すると、開始位置から文字列の末尾までが対象になります。

SELECT SUBSTR('ABCDEFG', 5) FROM DUAL;
-- 結果:'EFG'

このように、SUBSTRは非常にシンプルな構文で柔軟な文字列処理が可能です。次の章では、具体的な使用例をいくつか取り上げて、さらに理解を深めていきましょう。

基本的な使用例

ここでは、SUBSTR関数を使った基本的な文字列抽出の例をいくつか紹介します。実際のSQL文とその結果を見ながら、どのように動作するのかを確認していきましょう。

例1:特定の位置から指定した文字数を取り出す

SELECT SUBSTR('ABCDEFG', 2, 3) AS result FROM DUAL;
-- 結果:'BCD'

このSQLでは、文字列「ABCDEFG」の2文字目(’B’)から3文字分を抽出しています。結果は「BCD」となります。

例2:末尾から数えて文字を取り出す

SELECT SUBSTR('ABCDEFG', -3, 2) AS result FROM DUAL;
-- 結果:'EF'

開始位置に負の値(-3)を指定すると、末尾から数えて3文字目(’E’)が起点になります。そこから2文字分(’E’と’F’)を取り出して「EF」となります。

例3:文字数を省略して末尾まで抽出する

SELECT SUBSTR('ABCDEFG', 5) AS result FROM DUAL;
-- 結果:'EFG'

このように、文字数の引数を省略した場合、開始位置(5文字目=’E’)から末尾までをすべて抽出します。

開始位置が文字列の長さを超えている場合

SELECT SUBSTR('ABCDEFG', 10, 3) AS result FROM DUAL;
-- 結果:''(空文字列)

開始位置が文字列の長さ(7文字)を超えている場合、結果は空文字列になります。エラーにはなりません。

応用例

ここからは、SUBSTR関数を実務でどのように活用できるかを、具体的な例を通して見ていきましょう。固定長のコードや、区切り文字を含む文字列からの抽出など、実際の業務でもよくあるケースを紹介します。

固定長データの一部を抽出する

社員番号や伝票番号など、固定のフォーマットで構成された文字列から、必要な部分だけを取り出すケースです。

-- 社員コード「ABC202501」から「年度部分(2025)」を抽出
SELECT SUBSTR('ABC202501', 4, 4) AS extracted_year FROM DUAL;
-- 結果:'2025'

この例では、社員コードの4文字目から4文字分を取り出すことで、年度情報(2025)を抽出しています。

電話番号から市外局番を抽出する(INSTRとの併用)

区切り文字(たとえばハイフン)を含む文字列の場合、その位置を動的に取得するにはINSTR関数との組み合わせが有効です。

-- 電話番号から市外局番(最初の「-」の前)を抽出
SELECT SUBSTR('03-1234-5678', 1, INSTR('03-1234-5678', '-') - 1) AS area_code FROM DUAL;
-- 結果:'03'

このように、INSTRで「-」の位置を取得し、SUBSTRでその手前の文字列を取り出します。

まとめ

本記事では、OracleのSUBSTR関数を使って文字列の一部を抽出する方法について、基礎から応用まで解説しました。

  • SUBSTR(文字列, 開始位置 [, 文字数]) の形式で使用し、柔軟に部分文字列を取得できます。
  • 開始位置には正の値・負の値の両方が使え、文字数を省略することも可能です。
  • 固定長のデータ処理や、電話番号・メールアドレスなどの特定フォーマットからの抽出にも活用できます。
  • INSTR関数と組み合わせることで、区切り文字の位置に基づいた抽出も可能になります。

文字列の一部を取り出す処理は、データの整形や条件分岐など、多くの場面で登場します。
SUBSTR関数の使い方をしっかりと理解しておくことで、より柔軟で効率的なSQLを書くことができるようになるでしょう。

Oracle
スポンサーリンク
なんくるをフォローする

コメント

タイトルとURLをコピーしました