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

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()を使えば必要な場面で柔軟に変換・整形できます。

  1. 【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文を使っ

  2. 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文を使って、「日/月/年 時:分:秒」