Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLで文字列を抽出する方法についてまとめています。

MySQLのサンプルデータベースEmployeesを使用しています。

SQLで文字列を抽出するには、right、left、substring関数を使う

文字列操作関数を使うことで、SQLから文字列の抽出が可能です。

rightは文字列の右端から指定文字数分を抽出、leftは文字列の左端から指定文字数分を抽出、substringは指定文字数の位置から、指定文字数分を抽出する関数です。

mysql> select left('abcdefg', 3);
+--------------------+
| left('abcdefg', 3) |
+--------------------+
| abc                |
+--------------------+
1 row in set (0.00 sec)

mysql> select right('abcdefg', 3);
+---------------------+
| right('abcdefg', 3) |
+---------------------+
| efg                 |
+---------------------+
1 row in set (0.00 sec)

mysql> select substring('abcdefg', 3, 3);
+----------------------------+
| substring('abcdefg', 3, 3) |
+----------------------------+
| cde                        |
+----------------------------+
1 row in set (0.00 sec)

employees(社員テーブル)のhire_date(雇用日)をleft関数で4文字だけ抽出して、hire_year(雇用年)にしてみましょう。以下はemployeesテーブルの内容をそのまま10件抽出するコードです。

mysql> select emp_no, first_name, last_name, hire_date from employees limit 10;
+--------+------------+-----------+------------+
| emp_no | first_name | last_name | hire_date  |
+--------+------------+-----------+------------+
|  10001 | Georgi     | Facello   | 1986-06-26 |
|  10002 | Bezalel    | Simmel    | 1985-11-21 |
|  10003 | Parto      | Bamford   | 1986-08-28 |
|  10004 | Chirstian  | Koblick   | 1986-12-01 |
|  10005 | Kyoichi    | Maliniak  | 1989-09-12 |
|  10006 | Anneke     | Preusig   | 1989-06-02 |
|  10007 | Tzvetan    | Zielinski | 1989-02-10 |
|  10008 | Saniya     | Kalloufi  | 1994-09-15 |
|  10009 | Sumant     | Peac      | 1985-02-18 |
|  10010 | Duangkaew  | Piveteau  | 1989-08-24 |
+--------+------------+-----------+------------+
10 rows in set (0.00 sec)

hire_dateの箇所をleft(hire_date,4)として、左端から4文字抽出するよう修正しました。結果は以下の通りです。

mysql> select emp_no, first_name, last_name, left(hire_date,4) as hire_year from employees limit 10;
+--------+------------+-----------+-----------+
| emp_no | first_name | last_name | hire_year |
+--------+------------+-----------+-----------+
|  10001 | Georgi     | Facello   | 1986      |
|  10002 | Bezalel    | Simmel    | 1985      |
|  10003 | Parto      | Bamford   | 1986      |
|  10004 | Chirstian  | Koblick   | 1986      |
|  10005 | Kyoichi    | Maliniak  | 1989      |
|  10006 | Anneke     | Preusig   | 1989      |
|  10007 | Tzvetan    | Zielinski | 1989      |
|  10008 | Saniya     | Kalloufi  | 1994      |
|  10009 | Sumant     | Peac      | 1985      |
|  10010 | Duangkaew  | Piveteau  | 1989      |
+--------+------------+-----------+-----------+
10 rows in set (0.00 sec)

なお、指定位置から、指定文字数分だけ文字列を切り出す関数substringは、データベースごとに微妙に異なります。

指定文字出現以降の文字列を抽出

instrを使って、メールアドレスのドメインのみを抽出するには、以下のように記述します。

select email, substring(email,
  instr(email, '@')+1
 )
from emaillist;

【関連記事】
SQLで文字列を切り出すには?MySQLのsubstr関数の使い方 

emaillistデータベースのemailカラムに、user1@domain.comのような形式のデータが入っている前提です。@出現位置の次の位置以降を抽出するため、substring(email, instr(email, ‘@’)+1 )で「domain.com」が抽出されます。

OracleのSubstrbは、バイト数指定で文字列を抽出

Oracleでは、substrのほかに、substrbという関数が用意されています。

書式は、SUBSTRB(文字列, 開始桁,バイト数)で、文字数ではなくバイト数で文字列を抽出します。バイナリデータを扱う際に便利な関数です。

Oracle以外でバイト数指定を実現するには、CONVERT関数でBINARY型に変換してから、substring()関数を使用します。BINARY型の1文字=1バイトのため、leftやright、substringで文字数指定することで、バイト数指定で文字列を抽出することが可能になります。

ただし、日本語などマルチバイト文字に対して、半端な位置で文字列抽出をおこなうと、文字化けが発生するケースがあります。

mysql> select CAST(LEFT(CAST(name as BINARY), 10) as char(1000)) as name from animal;

参考)【MySQL】文字列をバイト数で切り取る-On Your Mark

まとめ

ポテパンダの一言メモ
  • 文字列の抽出は、left、right、substring関数などを使う
  • substring関数はデータベースによってはsubstrやmid関数の場合もあり
  • 指定文字出現箇所以降の文字列を切り出すには、instrを組み合わせれば可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。