勉強したことのメモ

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でWhere句をつけてdumpファイルを出力する方法

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

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

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

WordPressサイトのロードアベレージが高い際の対応方法

あるWordPressサイトのロードアベレージが先月ぐらいまでは通常0.5前後で ...

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

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

mysqlで正規化できない時はシリアライズ使う

アンケートか何かに機能追加している際、配列を カンマ区切りで結合して文字列でDB ...