MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで文字列から日付を抽出する方法|SUBSTRING_INDEX関数の実践的な使い方

MySQLで文字列から日付を抽出するには?

MySQLで文字列の中から日付部分だけを取り出したい場合、SUBSTRING_INDEX() 関数を使うのが便利です。この関数は、指定した区切り文字を基準に文字列を分割し、必要な部分を取得できます。

ここでは、実際にテーブルを作成し、文章の中に含まれる日付(例:12/31/2018)を抽出する手順を解説します。

1. サンプルテーブルを作成する

まず、文字列を格納するためのテーブルを作成します。

mysql> create table DemoTable
-> (
-> Title text
-> );
Query OK, 0 rows affected (0.58 sec)

2. テストデータを挿入する

INSERT文を使って、日付を含む文字列をいくつか登録します。

mysql> insert into DemoTable values('John has got joining date.12/31/2018');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Carol has got joining date.01/11/2019');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Sam will arrive at.12/03/2050');
Query OK, 1 row affected (0.87 sec)

3. 登録したレコードを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+---------------------------------------+
| Title |
+---------------------------------------+
| John has got joining date.12/31/2018 |
| Carol has got joining date.01/11/2019 |
| Sam will arrive at.12/03/2050 |
+---------------------------------------+
3 rows in set (0.00 sec)

4. SUBSTRING_INDEX()で日付を抽出する

それでは、文字列から日付部分を抽出するクエリを見てみましょう。

mysql> select substring_index(substring_index(Title,".", -1), ".", 1) from DemoTable;

実行結果:

+----------------------------------------------------------+
| substring_index(substring_index(Title,".", -1), ".", 1) |
+----------------------------------------------------------+
| 12/31/2018 |
| 01/11/2019 |
| 12/03/2050 |
+----------------------------------------------------------+
3 rows in set (0.00 sec)

クエリの仕組みを解説

このクエリでは、SUBSTRING_INDEX() を2段階で組み合わせています。

  • 内側の処理substring_index(Title, ".", -1) — 区切り文字「.」を基準に、末尾側から数えて最初の部分(つまり最後の「.」以降の文字列)を取得します。
  • 外側の処理substring_index(..., ".", 1) — 取得した文字列に対してさらに同じ処理を行い、万が一複数の「.」が含まれていても先頭部分のみを確実に取り出します。

これにより、「John has got joining date.12/31/2018」のような文章から「12/31/2018」という日付部分だけを正確に抽出できます。

補足:抽出した日付をDATE型として扱いたい場合

抽出した文字列をそのまま日付として比較・計算に使いたい場合は、STR_TO_DATE() 関数と組み合わせると便利です。

SELECT STR_TO_DATE(
substring_index(substring_index(Title, ".", -1), ".", 1),
'%m/%d/%Y'
) AS join_date FROM DemoTable;

このように書くことで、「12/31/2018」のような文字列が 2018-12-31 という標準的な日付形式に変換され、日付関数やORDER BYでの並べ替えにも利用できるようになります。

まとめ

  • MySQLで文字列から日付を抽出するには SUBSTRING_INDEX() を使う。
  • 区切り文字(この例では「.」)を基準に、ネストして呼び出すことで目的の部分だけを取得できる。
  • STR_TO_DATE() と組み合わせれば、抽出結果をDATE型として扱うことも可能。
  1. Pythonで文字列から日付を抽出・解析する方法

    文字列から日付を抽出するには、まずその文字列内で日付がどのような形式(フォーマット)で表現されているかを把握しておく必要があります。基本的なアプローチとしては、正規表現(reモジュール)で日付部分を取り出し、datetime.datetime.strptime() で解析(パース)するという流れになります。例えば、文字列中に「YYYY-MM-DD」形式の日付が含まれている場合、以下のコードで抽出と解析ができます。コード例import re import datetime s = I have a meeting on 2018-12-10 in New York match = re.sea

  2. Pythonで文字列から部分文字列を抽出する方法|正規表現のグループキャプチャ活用

    正規表現のグループキャプチャを使った部分文字列の抽出 Pythonで文字列の中から特定の部分文字列を取り出したい場合、reモジュールの正規表現における「グループキャプチャ」を利用するのが効果的です。この手法を使うには、抽出したい部分文字列のフォーマットや、その前後の文脈をある程度把握しておく必要があります。 例えば、文章の中から「$xxx,xxx.xx」という形式で書かれた金額情報を抽出したいとします。その場合は、re.search()と括弧で囲んだキャプチャグループを次のように組み合わせます。 import re text = The phone is priced at $15,745.