勉強したことのメモ

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でテーブルのカラム名やカラムの型等、詳細情報を取得する方法

MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法をメモ。 & ...

MySQLのTEMPORARY TABLE(テンポラリテーブル)で高速化を図る方法

MySQLで5000万件ぐらいデータが入っているテーブルから日本語検索しないとい ...

mysqldumpが使えないレンタルサーバでMySQLのバックアップ

mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...

SortableJSを使ってデータの並べ替え&保存

あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...

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

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