MySQLで日付型のデータを出力する際「YYYY-MM-DD」という形以外のフォーマットで出力できるということをご存知でしょうか。そこで便利なのが「DATE_FORMAT」という関数です。今回はこちらのフォーマットを使用し、日付型データをフォーマットしていく方法についてご紹介していきます。
- 日付型データの概要
- MySQLで日付型データをフォーマット
日付型データとは?
そもそもMySQLの日付型データとは何でしょうか。本コラムで日付型データとして指すのはDATE型・DATETIME型・TIMESTAMP型の3種類のデータ型のことです。この3つの特徴についても押さえておきましょう。
- DATE型 → 日付部分のみを含む値
- DATETIME型 → 日付と時間の両方の部分を含む値
- TIMESTAMP型 → 現在の日付および時間への自動更新機能
それぞれの形の初期フォーマットも確認しておきましょう。
- DATE型 → YYYY-MM-DD(例:2020-01-27)
- DATETIME型 → YYYY-MM-DD HH:MM:SS(例:2020-01-27 16:47:12)
- TIMESTAMP型 → YYYY-MM-DD HH:MM:SS(例:2020-01-27 16:47:12)
すでに触れた通りDATE型が日付までしか表示できないのに対し、DATETIME型やTIMESTAMP型は日付と時間の両方を取得することができるデータ型となっています。
MySQLで日付型をフォーマットしてみよう
それでは早速、先ほど確認した3つの日付型データを用いて、フォーマットを変えてみましょう。ここでは日付型データのフォーマットを変更できるDATE_FORMAT関数を使っていきます。
DATE型をフォーマット
まずはDATE型をフォーマットしてみましょう。まずは普通にDATE型を出力してみます。
通常のDATE型を出力してフォーマットを確認
mysql> SELECT '2020-01-27'; +------------+ | 2020-01-27 | +------------+ | 2020-01-27 | +------------+
DATE_FORMAT関数を使用
mysql> SELECT DATE_FORMAT('2020-01-27', '%Y年%m月%d日'); +----------------------------------------------+ | DATE_FORMAT('2020-01-27', '%Y年%m月%d日') | +----------------------------------------------+ | 2020年01月27日 | +----------------------------------------------+ 1 row in set (0.00 sec)
DATE_FORMAT関数を用いることによって「2020-01-27」というDATE型のデータを「2020年01月27日」というフォーマットに変えることができました。では、ここでDATE_FORMAT関数が何をしているかについて見ていきましょう。
DATE_FORMAT関数の働き
DATE_FORMAT関数は以下のように記載されることで、第一引数に入った日付データを、第二引数のフォーマットへと変換してくれます。
DATE_FORMAT('日付データ', 'フォーマット後の形式');
先ほどのDATE型では、以下のようなフォーマット指定が第二引数に用いられました。
- %Y → 年を数字の4桁で表示する
- %m → 月を数字の2桁で表示する
- %d → 日付を数字の2桁で表示する
他にもDATE_FORMATのフォーマット指定には以下のようなものがあります。一部を見ていきましょう。
- %D → 英語のサフィクスを持つ日付 (0th, 1st, 2nd, 3rd, …)で表示する
- %a → 簡略曜日名 (Sun..Sat)で表示する
- %H → 時間 (00..23)で表示する
- %j → 年間通算日 (001..366)で表示する
- %M → 月名 (January..December)で表示する
- %T → 時間、24 時間単位 (hh:mm:ss)で表示する
- %W → 曜日名 (Sunday..Saturday)で表示する
- %y → 年、数字 (2 桁)で表示する
上記のDATE_FORMATのフォーマット指定を見ながら、以下のハンズオンも実際に手を動かして体験していきましょう。
DATETIME型をフォーマット
次にDATETIME型をフォーマットしていきましょう。
通常のDATETIME型を出力してフォーマットを確認
mysql> SELECT '2020-01-27 19:22:19'; +---------------------+ | 2020-01-27 19:22:19 | +---------------------+ | 2020-01-27 19:22:19 | +---------------------+ 1 row in set (0.00 sec)
DATE_FORMAT関数を使用
mysql> SELECT DATE_FORMAT('2020-01-27 19:22:19', '%W %M %Y'); +------------------------------------------------+ | DATE_FORMAT('2020-01-27 19:22:19', '%W %M %Y') | +------------------------------------------------+ | Monday January 2020 | +------------------------------------------------+ 1 row in set (0.00 sec)
指定通り、日が曜日になり、月が英語名になり、秒数が省略されましたね。他の例も試してみましょう。
mysql> SELECT '2020-01-27 19:22:19'; +---------------------+ | 2020-01-27 19:22:19 | +---------------------+ | 2020-01-27 19:22:19 | +---------------------+ 1 row in set (0.00 sec)
DATE_FORMAT関数を使用
mysql> SELECT DATE_FORMAT('2020-01-27 19:22:19','%D %y %a %d %m %b %j'); +-----------------------------------------------------------+ | DATE_FORMAT('2020-01-27 19:22:19','%D %y %a %d %m %b %j') | +-----------------------------------------------------------+ | 27th 20 Mon 27 01 Jan 027 | +-----------------------------------------------------------+ 1 row in set (0.00 sec)
指定したフォーマットが複雑だったかもしれませんが、1つずつ分解してみればまったく難しいことはありません。このようにフォーマットが複雑になったとしても、DATE_FORMAT関数を使えば簡単にDATETIME型のデータを変形できるのです。
まとめ
今回はDATE_FORMATという関数を用いて、日付型データをフォーマットしていく方法についてご紹介していきました。出力する際に、指定の日付データの形を整形したいという場合にこの関数が有効です。DATE_FORMATには今回使いきれなかったフォーマットの指定がさまざまにありますので、ぜひ試してみてくださいね。