SQLのSUBSTR()関数とは?文字列の一部を抽出する方法を実例付きで解説
データベースを扱っていると、文字列値の一部分だけを取り出して表示したい場面によく出会います。そんなときに役立つのが、SUBSTR()という文字列関数です。なお、同様の機能を持つSUBSTRING()という関数も存在します。本記事では、SQLにおけるSUBSTR関数の基本的な使い方から応用までを、具体例とともにわかりやすく解説します。
準備:サンプルデータの作成
本記事では、以下のSQL Fiddleを使用します。まずはサンプルとなるテーブルを作成しましょう。スキーマは次のとおりです。
create table names ( id INT, name VARCHAR(50), age INT, gender VARCHAR(50) ); insert into names (id, name, age, gender) values (1, 'Bret Starkings', 55, 'M'); insert into names (id, name, age, gender) values (2, 'Bobbye Eyckel', 76, 'F'); insert into names (id, name, age, gender) values (3, 'Barbie Veschi', 50, 'F'); insert into names (id, name, age, gender) values (4, 'Electra Blazewicz', 47, 'F');
このテーブルに対してSUBSTR()関数を使い、nameカラムの一部を取得していきます。関数の基本構文は以下のとおりです。
SUBSTR(column_name, position, num_letters);
この関数は3つの引数を受け取ります。
- 第1引数: 部分文字列を抽出したい対象のカラム名または文字列
- 第2引数: 抽出を開始する位置(インデックスは0ではなく1から始まる点に注意)
- 第3引数: 抽出する文字数
基本の使い方:開始位置と文字数を指定する
それでは、nameカラムに対して先頭から4文字を抽出してみましょう。SQL文は次のようになります。
SELECT name, SUBSTR(name, 1, 4) AS NAME_SUBSTRING, age, gender FROM names;
実行結果は以下のとおりです。
| name | NAME_SUBSTRING | age | gender |
| Bret Starkings | Bret | 55 | M |
| Bobbye Eyckel | Bobb | 76 | F |
| Barbie Veschi | Barb | 50 | F |
| Electra Blazewicz | Elec | 47 | F |
| Estrella Borleace | Estr | 57 | F |
各氏名の先頭4文字が正しく抽出されていることが確認できます。
第3引数を省略した場合
SUBSTR()関数の第3引数(文字数)は、省略することができます。省略した場合は、指定した開始位置から文字列の末尾まですべてが抽出されます。
SELECT name, SUBSTR(name, 4) AS NAME_SUBSTRING, age, gender FROM names;
| name | NAME_SUBSTRING | age | gender |
| Bret Starkings | t Starkings | 55 | M |
| Bobbye Eyckel | bye Eyckel | 76 | F |
| Barbie Veschi | bie Veschi | 50 | F |
| Electra Blazewicz | ctra Blazewicz | 47 | F |
| Estrella Borleace | rella Borleace | 57 | F |
4文字目以降の残りの文字列がすべて表示されていますね。
負の値を指定して末尾から抽出する
SUBSTR()関数では、開始位置に負の値を指定することも可能です。負の値を指定すると、文字列の末尾から数えた位置を起点として抽出が行われます。
SELECT name, SUBSTR(name, -4) AS NAME_SUBSTRING, age, gender FROM names;
| name | NAME_SUBSTRING | age | gender |
| Bret Starkings | ings | 55 | M |
| Bobbye Eyckel | ckel | 76 | F |
| Barbie Veschi | schi | 50 | F |
| Electra Blazewicz | wicz | 47 | F |
| Estrella Borleace | eace | 57 | F |
この例では「-4」を指定しているため、各氏名の末尾4文字が抽出されています。ファイルの拡張子を取り出したい場合などにも便利なテクニックです。
まとめ:データベースごとの違いに注意
他のSQL関数と同様に、SUBSTR()関数の構文は使用するデータベースの種類(MySQL、PostgreSQL、Oracleなど)によって多少異なる場合があります。ただし、文字列の一部を抽出するという基本的な概念はどのデータベースでも共通しています。
重要なポイントは次の2つです。
- 位置パラメータのインデックスは0ではなく1から始まる
- 負の値を指定すると末尾から数えて抽出できる
この2点を押さえておけば、SUBSTR関数を使ったクエリ作成で迷うことはほとんどないでしょう。ぜひ実際のデータで試してみてください。
-
【SQL Server】SUBSTRING関数の使い方を徹底解説!文字列から部分文字列を抽出する方法
本記事では、SQL ServerのSUBSTRING関数を使って、指定した文字列から部分文字列(サブストリング)を抽出する方法について、初心者の方にもわかりやすく解説します。 SUBSTRING関数とは SUBSTRING関数は、入力された文字列の中の任意の位置から、指定した長さの部分文字列を取り出すための関数です。氏名や商品コードなど、文字列の一部だけを取得したい場合に非常に便利な文字列操作関数です。 基本構文 SQL ServerでSUBSTRING関数を使用する際の構文は以下のとおりです。 SUBSTRING(string, start, length) パラメータの説明 str
-
SQL ServerのABS関数の使い方を徹底解説!絶対値を求める方法と具体例
この記事では、SQL ServerにおけるABS関数の使い方について、構文と具体的な実行例を交えながら詳しく解説します。ABS関数の動きをしっかり理解し、実際の開発に活かせるようになりましょう。 ABS関数とは ABS関数は、SQL Serverにおいて指定した数値の絶対値を返す数学関数です。負の値を正の値に変換したい場合など、数値の符号を無視して大きさだけを取得したいときに非常に便利です。 基本構文 SQL ServerでABS関数を使用する際は、以下の構文を使います。 ABS(number) パラメータ number: 絶対値に変換したい対象となる数値を指定します。 注意点