勉強したことのメモ

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 データベース

  関連記事

MySQLでtime型データからint型データの減算を行い、減算後のデータで条件検索する方法

MySQLでtime型データからint型データの減算を行い、減算後のデータを検索 ...

MySQLでWhere句をつけてdumpファイルを出力する方法

MySQLであるテーブルからWhere句をつけて、絞った結果をダンプさせたかった ...

WordPressでデータベース接続確立エラー発生時の対応方法

WordPressで「データベース接続確立エラー」というエラー表示がされた。大抵 ...

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

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

MySQLでIPを整数値としてカラムに格納する

MySQLでIPを整数値としてカラムに格納しているケースがあった。今までIPが必 ...