勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLにてdatetime型のカラムを整形し「年月日のみ形式」または「秒のみ省いた形式」で表示する方法

  MySQL データベース

MySQLにてdatetime型のカラムに登録日時等を格納しており、管理画面側では「秒のみ省いた形式」で表示、サイト側では「年月日のみ形式」で表示のように表示形式を変えたい場合がよくある。このような場合PHPで対応していたがMySQLで対応した方がスマートに記述できそう。以下に対応方法をメモ。

 

テーブル構造とデータ内容

mysql> SHOW COLUMNS FROM `test_table`;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int      | NO   | PRI | NULL    | auto_increment |
| ymd   | datetime | NO   |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+

mysql> SELECT * FROM `test_table`;
+----+---------------------+
| id | ymd                 |
+----+---------------------+
|  1 | 2024-01-01 01:01:01 |
|  2 | 2024-01-02 02:02:02 |
|  3 | 2024-01-03 03:03:03 |
|  4 | 2024-01-04 04:04:04 |
|  5 | 2024-01-05 05:05:05 |
+----+---------------------+

 

対応方法

年月日のみ形式

SELECT DATE_FORMAT(`ymd`, '%Y-%m-%d') AS ymd 
FROM `test_table`;

+------------+
| ymd        |
+------------+
| 2024-01-01 |
| 2024-01-02 |
| 2024-01-03 |
| 2024-01-04 |
| 2024-01-05 |
+------------+

秒のみ省いた形式

SELECT DATE_FORMAT(`ymd`, '%Y-%m-%d %H:%i') AS ymd 
FROM `test_table`;

+------------------+
| ymd              |
+------------------+
| 2024-01-01 01:01 |
| 2024-01-02 02:02 |
| 2024-01-03 03:03 |
| 2024-01-04 04:04 |
| 2024-01-05 05:05 |
+------------------+

 

リファレンス

DATE_FORMAT

https://dev.mysql.com/doc/refman/8.0/ja/date-and-time-functions.html#function_date-format

 

所感

DATE_FORMATってなんか見たことあるなと思ったら過去にdatetime型のカラムから秒は省いて検索する方法というメモにて使用していた。

その時はWHERE句で使っていたけど、SELECT時のカラム指定でも使えて便利な関数なので覚えておきたい。

 - MySQL データベース

  関連記事

MySQLにて指定したカラムがNULLもしくは空の場合、あらかじめ決めておいた内容で表示する方法

何らかのフォームとMySQLを組み合わせた際に任意入力の項目はそのカラムがNUL ...

MySQLで大文字小文字

半角英数字のみのフォームで入力した値を検索した際、 データに差異が発生。 [Aa ...

エックスサーバーでMySQLのサイズに注意

エックスサーバーで自動更新のログをMySQLに保存するようなシステムを動かしてい ...

Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

MySQLでROW_NUMBER関数を使用してグループ毎に連番を設定する方法

以前にMySQLでオートインクリメントを使用せずにグループ毎に連番を設定する方法 ...