MySQLのSELECT文でDATETIMEを「DD-MM-YYYY HH:MM:SS」形式に変換する方法
MySQLのテーブルからDATETIME型のデータをそのまま取得すると、「YYYY-MM-DD HH:MM:SS」という標準形式で表示されます。しかし、実際のアプリケーションやレポートでは「日-月-年」の順序で表示したいケースも多くあります。そんなときに活用できるのが、MySQLに組み込まれているDATE_FORMAT()関数です。
DATE_FORMAT()関数の基本構文
DATE_FORMAT()関数は、第1引数に日時のカラム名、第2引数に希望するフォーマット指定子を渡して使用します。基本構文は以下のとおりです。
SELECT DATE_FORMAT(yourDatetimeColumnName, yourFormat) AS anyVariableName FROM yourTableName;
サンプルテーブルの作成
それでは、実際に動作を確認してみましょう。まずは商品IDと納品日を持つテーブルを作成します。
mysql> create table UserDateFormat
-> (
-> ProductId int,
-> ProductDeliverDate datetime
-> );
Query OK, 0 rows affected (0.93 sec)次に、INSERT文を使って現在日時を基準としたテストデータを数件登録します。date_add()関数で1年前後の日付を生成しています。
mysql> insert into UserDateFormat values(100,date_add(now(),interval 1 year)); Query OK, 1 row affected (0.10 sec) mysql> insert into UserDateFormat values(101,date_add(now(),interval -1 year)); Query OK, 1 row affected (0.48 sec) mysql> insert into UserDateFormat values(102,date_add(now(),interval -3 year)); Query OK, 1 row affected (0.17 sec) mysql> insert into UserDateFormat values(103,date_add(now(),interval -2 year)); Query OK, 1 row affected (0.20 sec)
登録したデータをSELECT文で確認します。
mysql> select *from UserDateFormat;
実行結果
+-----------+---------------------+ | ProductId | ProductDeliverDate | +-----------+---------------------+ | 100 | 2019-12-24 13:32:47 | | 101 | 2017-12-24 13:32:58 | | 102 | 2015-12-24 13:33:08 | | 103 | 2016-12-24 13:33:17 | +-----------+---------------------+ 4 rows in set (0.00 sec)
このように、MySQLのDATETIME型はデフォルトでは「YYYY-MM-DD」形式で格納・表示されます。
DATETIMEを「DD-MM-YYYY」形式に変換する
ここからが本題です。DATE_FORMAT()関数を使えば、取得時に好きな形式へ自由に変換できます。「DD-MM-YYYY HH:MM:SS」形式で表示するクエリは以下のとおりです。
mysql> select date_format(ProductDeliverDate,'%d-%m-%Y %h:%i:%s') as UserFormat from UserDateFormat;
実行結果(12時間表記)
+----------------------+ | UserFormat | +----------------------+ | 24-12-2019 01:32:47 | | 24-12-2017 01:32:58 | | 24-12-2015 01:33:08 | | 24-12-2016 01:33:17 | +----------------------+ 4 rows in set (0.00 sec)
フォーマット指定子に小文字の%hを使うと、時間が12時間制(AM/PMベース)で表示される点に注意してください。上記の例では「13時」が「01時」と表示されています。
24時間表記で表示する方法
時間を24時間制で表示したい場合は、大文字の%Hを使用します。
mysql> select date_format(ProductDeliverDate,'%d-%m-%Y %H:%i:%S') as UserFormat from UserDateFormat;
実行結果(24時間表記)
+----------------------+ | UserFormat | +----------------------+ | 24-12-2019 13:32:47 | | 24-12-2017 13:32:58 | | 24-12-2015 13:33:08 | | 24-12-2016 13:33:17 | +----------------------+ 4 rows in set (0.00 sec)
今度は「13:32:47」と、元の時刻がそのまま反映されました。
使用したフォーマット指定子の一覧
今回の例で使った主な指定子は以下のとおりです。これらを組み合わせることで、さまざまな表示形式に対応できます。
%d… 日(01〜31)%m… 月(01〜12)%Y… 年(4桁)%h… 時(12時間制、01〜12)%H… 時(24時間制、00〜23)%i… 分(00〜59)%s/%S… 秒(00〜59)
DATE_FORMAT()関数をマスターすれば、SQL側で日時の見た目を整えられるため、アプリケーション側での変換処理が不要になり、コードがシンプルになります。用途に応じて12時間制と24時間制を使い分けてみてください。
-
MySQLで現在の日付より前の日付データを抽出する方法
MySQLでは、NOW() 関数と比較演算子を使うことで、現在の日時より前の日付を持つレコードを簡単に抽出できます。この記事では、実際にテーブルを作成し、サンプルデータを登録したうえで、現在日時より過去の日付レコードを取得する手順を解説します。 1. サンプルテーブルの作成 まず、日付型(DATETIME)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1877 ( DueDate datetime ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、IN
-
SELECTでテーブル全体を返すMySQLストアドプロシージャの作成方法
MySQLでは、ストアドプロシージャ内でSELECT文を実行することで、引数で渡した条件に一致するレコード(この例ではテーブル全体)を結果として返すことができます。ここでは、テーブルの作成からプロシージャの呼び出しまで、手順を追って解説します。 1. サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1971 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, &n