勉強したことのメモ

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

MySQLにてSELECT時にdate型のカラムから年齢を計算し取得する方法

  MySQL データベース

MySQLにdate型のカラムに誕生年月日が格納されており、そこから年齢を計算して取得したい。データを受け取ってPHP側で計算しないといけないのかと思いきやMySQLで完結できるみたい。以下に対応方法をメモ。

 

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

mysql> SHOW COLUMNS FROM `test_table`;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| name     | varchar(255) | NO   |     | NULL    |                |
| birthday | date         | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

mysql> SELECT * FROM `test_table`;
+----+-----------+------------+
| id | name      | birthday   |
+----+-----------+------------+
|  1 | 山田      | 2000-01-01 |
|  2 | 鈴木      | 1990-05-05 |
|  3 | 佐々木    | 1980-12-31 |
+----+-----------+------------+

 

対応方法

SQL文

SELECT `name`, `birthday`, TIMESTAMPDIFF(YEAR, `birthday`, CURDATE()) AS `age`
FROM `test_table` 
ORDER BY `age`;

出力結果

+-----------+------------+------+
| name      | birthday   | age  |
+-----------+------------+------+
| 山田      | 2000-01-01 |   24 |
| 鈴木      | 1990-05-05 |   34 |
| 佐々木    | 1980-12-31 |   43 |
+-----------+------------+------+

解説等

CURDATEで現在の年月日を取得→TIMESTAMPDIFFで現在日付とbirthdayの差分を取得→TIMESTAMPDIFFの第1引数であるYEARとしてageを出力という流れみたい。

 

リファレンス

日付の計算

https://dev.mysql.com/doc/refman/8.0/ja/date-calculations.html

TIMESTAMPDIFF

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

CURDATE

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

 - MySQL データベース

  関連記事

PHPからMySQLにシリアライズしたデータを格納

アンケートフォームみたいなのがあって、 今後も定期開催し、尚且つ質問内容は増減す ...

SSH接続でMySQLにダンプファイルをインポートする方法

phpMyAdminやAdminerが入っていなかったり、ダンプファイルのサイズ ...

MySQLでカラム数の異なるテーブルを結合する(UNION)

MySQLでカラム数の異なるテーブル同士をUNIONで結合させたかった。ただ、何 ...

MySQLで「server has gone~」というエラーの対応方法

MySQLで「MySQL server has gone away」というエラー ...

MySQLでdatetime型のカラムから秒は省いて検索する方法

MySQLでdatetime型のカラムに対して「2022-10-07 10:30 ...