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

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時間制を使い分けてみてください。

  1. MySQLで現在の日付より前の日付データを抽出する方法

    MySQLでは、NOW() 関数と比較演算子を使うことで、現在の日時より前の日付を持つレコードを簡単に抽出できます。この記事では、実際にテーブルを作成し、サンプルデータを登録したうえで、現在日時より過去の日付レコードを取得する手順を解説します。 1. サンプルテーブルの作成 まず、日付型(DATETIME)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1877 ( DueDate datetime ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、IN

  2. SELECTでテーブル全体を返すMySQLストアドプロシージャの作成方法

    MySQLでは、ストアドプロシージャ内でSELECT文を実行することで、引数で渡した条件に一致するレコード(この例ではテーブル全体)を結果として返すことができます。ここでは、テーブルの作成からプロシージャの呼び出しまで、手順を追って解説します。 1. サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1971     (     StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,  &n