MySQLにてSELECT時にdate型のカラムから年齢を計算し取得する方法
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でtime型データからint型データの減算を行い、減算後のデータで条件検索する方法
MySQLでtime型データからint型データの減算を行い、減算後のデータを検索 ...
-
-
MySQLでWhere句をつけてdumpファイルを出力する方法
MySQLであるテーブルからWhere句をつけて、絞った結果をダンプさせたかった ...
-
-
WordPressでデータベース接続確立エラー発生時の対応方法
WordPressで「データベース接続確立エラー」というエラー表示がされた。大抵 ...
-
-
PHPからMySQLにシリアライズしたデータを格納
アンケートフォームみたいなのがあって、 今後も定期開催し、尚且つ質問内容は増減す ...
-
-
MySQLでIPを整数値としてカラムに格納する
MySQLでIPを整数値としてカラムに格納しているケースがあった。今までIPが必 ...