【MySQL】日付をフォーマットして「年-月-日」形式に変換する方法
MySQLでは、STR_TO_DATE()関数とDATE_FORMAT()関数を組み合わせることで、英語表記の日付文字列を「年-月-日(YYYY-MM-DD)」形式に簡単に変換できます。この記事では、実際にテーブルを作成してデータを登録し、日付形式を変換するまでの手順をサンプルコードとともにわかりやすく解説します。
1. テーブルを作成する
まず、日付文字列を保存するためのテーブルを作成します。ここではVARCHAR型のカラムを用意しました。
mysql> create table DemoTable666(AdmissionDate varchar(200)); Query OK, 0 rows affected (0.57 sec)
2. サンプルデータを挿入する
INSERT文を使って、英語形式の日付文字列をいくつか登録します。
mysql> insert into DemoTable666 values('Sat,20 Jul 2019 04:29:35');
Query OK, 1 row affected (1.12 sec)
mysql> insert into DemoTable666 values('Fri,02 Oct 2018 12:19:15');
Query OK, 1 row affected (1.05 sec)
mysql> insert into DemoTable666 values('Sun,01 Aug 2016 11:10:05');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable666 values('Fri, 06 Nov 2015 04:06:05 -0500');
Query OK, 1 row affected (0.24 sec)
3. 登録したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable666;
+---------------------------------+ | AdmissionDate | +---------------------------------+ | Sat,20 Jul 2019 04:29:35 | | Fri,02 Oct 2018 12:19:15 | | Sun,01 Aug 2016 11:10:05 | | Fri, 06 Nov 2015 04:06:05 -0500 | +---------------------------------+ 4 rows in set (0.00 sec)
4. 日付を「年-月-日」形式に変換する
次のクエリを実行すると、元の英語形式の日付を「年-月-日 時:分:秒(YYYY-MM-DD HH:MM:SS)」形式に変換できます。
mysql> select DATE_FORMAT(STR_TO_DATE(AdmissionDate, '%a, %d %b %Y %H:%i:%S'),'%Y-%m-%d %H:%i:%s') AS MyDate from DemoTable666;
実行結果
+---------------------+ | MyDate | +---------------------+ | 2019-07-20 04:29:35 | | 2018-10-02 12:19:15 | | 2016-08-01 11:10:05 | | 2015-11-06 04:06:05 | +---------------------+ 4 rows in set, 1 warning (0.00 sec)
クエリの仕組み:2段階の変換処理
この変換は、次の2つの関数を組み合わせて実現しています。
- STR_TO_DATE(AdmissionDate, '%a, %d %b %Y %H:%i:%S')
文字列を解析し、MySQL内部で扱える日時値(DATETIME型相当)に変換します。 - DATE_FORMAT(..., '%Y-%m-%d %H:%i:%s')
変換された日時値を、指定した書式の文字列として出力します。
主な書式指定子の意味
| 指定子 | 意味 |
|---|---|
| %a | 曜日の省略形(Sat、Fri など) |
| %b | 月名の省略形(Jul、Oct など) |
| %d | 日(01〜31) |
| %Y | 4桁の年 |
| %H | 時・24時間表記(00〜23) |
| %i | 分(00〜59) |
| %S / %s | 秒(00〜59) |
注意点:タイムゾーンオフセットを含むデータ
実行結果に「1 warning」と表示されているのは、4件目のレコードにタイムゾーンオフセット(-0500)が含まれているためです。この部分は書式指定子で定義されていないため無視されますが、変換自体は正しく行われています。より厳密に処理したい場合は、あらかじめSUBSTRING_INDEX()などでオフセット部分を取り除いておくと安心です。
このようにSTR_TO_DATE()とDATE_FORMAT()を組み合わせれば、さまざまな形式の日付文字列を自由に整形できます。ログデータや外部システムから取り込んだ日付を扱う際にぜひ活用してください。
-
VARCHARデータをMySQLの日付形式に変換する方法
VARCHAR型の日付文字列をDATE型に変換するにはMySQLでは、VARCHAR型として保存されている日付データを正式な日付形式に変換する場合、STR_TO_DATE() 関数を使用します。この関数は、文字列と書式指定子(フォーマット指定子)を組み合わせることで、任意の形式の文字列を日付値へと変換できる便利な機能です。以下、具体的な手順をサンプルとともに解説します。1. サンプルテーブルの作成まず、VARCHAR型のカラムを持つテーブルを作成します。mysql> create table DemoTable1989 ( DueDate varchar(20)
-
MySQLで日付形式を変換する方法|STR_TO_DATE()関数の使い方を解説
MySQLでは、VARCHAR型などで保存された文字列の日付データを、正しい日付・時刻形式に変換したいケースがよくあります。そんなときに活躍するのが STR_TO_DATE() 関数です。この記事では、実際のSQL例とともに具体的な使い方を解説します。サンプルテーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable2010 ( DueDate varchar(20) ); Query OK, 0 rows affected (0.68 sec)テストデータの挿入INSERT文を使って、「日/月/年 時:分:秒」