MySQLでYYYYMMDD形式の日付をYYYY-MM-DD形式に変換する方法【サンプルコード付き】
MySQLでは、STR_TO_DATE()関数とDATE_FORMAT()関数を組み合わせることで、「20121221」のようなYYYYMMDD形式の文字列を「2012-12-21」のようなハイフン区切りの日付形式へ簡単に変換できます。
基本の構文
SELECT DATE_FORMAT(STR_TO_DATE(カラム名, '%Y%m%d'), '%Y-%m-%d') FROM テーブル名;
STR_TO_DATE()がYYYYMMDD形式の文字列を日付値として解析し、その結果をDATE_FORMAT()が「%Y-%m-%d」(年-月-日)の形式に整形します。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成します。
mysql> CREATE TABLE DemoTable
(
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientProjectDeadline VARCHAR(200)
);
Query OK, 0 rows affected (0.57 sec)
テストデータの挿入
INSERTコマンドを使って、YYYYMMDD形式の日付を複数件登録します。
mysql> INSERT INTO DemoTable(ClientProjectDeadline) VALUES('20121221');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable(ClientProjectDeadline) VALUES('20190416');
Query OK, 1 row affected (0.53 sec)
mysql> INSERT INTO DemoTable(ClientProjectDeadline) VALUES('20160624');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable(ClientProjectDeadline) VALUES('20170131');
Query OK, 1 row affected (0.20 sec)
登録済みデータの確認
SELECT文で全レコードを表示してみましょう。
mysql> SELECT * FROM DemoTable;
実行結果は以下のとおりです。
+----------+-----------------------+ | ClientId | ClientProjectDeadline | +----------+-----------------------+ | 1 | 20121221 | | 2 | 20190416 | | 3 | 20160624 | | 4 | 20170131 | +----------+-----------------------+ 4 rows in set (0.00 sec)
YYYYMMDDをYYYY-MM-DD形式に変換するクエリ
次のクエリを実行すると、YYYYMMDD形式の日付がYYYY-MM-DD形式に変換されて表示されます。
mysql> SELECT DATE_FORMAT(STR_TO_DATE(ClientProjectDeadline, '%Y%m%d'), '%Y-%m-%d') FROM DemoTable;
出力結果:
+------------------------------------------------------------------------+ | DATE_FORMAT(STR_TO_DATE(ClientProjectDeadline, '%Y%m%d'), '%Y-%m-%d') | +------------------------------------------------------------------------+ | 2012-12-21 | | 2019-04-16 | | 2016-06-24 | | 2017-01-31 | +------------------------------------------------------------------------+ 4 rows in set (0.05 sec)
補足:年を2桁(YY-MM-DD)で表示したい場合
西暦を下2桁のみで表示したいときは、書式指定子を大文字の%Yから小文字の%yに変更するだけです。
mysql> SELECT DATE_FORMAT(STR_TO_DATE(ClientProjectDeadline, '%Y%m%d'), '%y-%m-%d') FROM DemoTable;
この場合の出力例は以下のようになります。
12-12-21 19-04-16 16-06-24 17-01-31
実務上のポイント
日付を頻繁に検索・並べ替える場合は、VARCHAR型ではなくDATE型やDATETIME型のカラムに保存しておくのがベストプラクティスです。インデックスが正しく機能し、範囲検索や比較も高速になります。今回のように文字列として保存された日付も、STR_TO_DATE()を使えば必要な場面で柔軟に変換・整形できます。
-
【MySQL】INT型のyyyymmdd形式の数値を日付(DATE)に変換する方法
MySQLでは、INT型で保存された「yyyymmdd」形式の数値(例:20190108)を日付型に変換したいケースがよくあります。このような場合、DATE()関数を使うことで簡単に変換できます。本記事では、実際にテーブルを作成し、サンプルデータを用いてDATE()関数による変換手順を解説します。1. サンプルテーブルの作成まず、INT型のカラムを持つテーブルを作成します。mysql> create table DemoTable ( Number int ); Query OK, 0 rows affected (0.48 sec)2. サンプルデータの挿入INSERT文を使っ
-
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文を使って、「日/月/年 時:分:秒」