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でテーブルのカラム名やカラムの型等、詳細情報を取得する方法
MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法をメモ。 & ...
-
MySQLのTEMPORARY TABLE(テンポラリテーブル)で高速化を図る方法
MySQLで5000万件ぐらいデータが入っているテーブルから日本語検索しないとい ...
-
mysqldumpが使えないレンタルサーバでMySQLのバックアップ
mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...
-
SortableJSを使ってデータの並べ替え&保存
あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...
-
MySQLでtime型データからint型データの減算を行い、減算後のデータで条件検索する方法
MySQLでtime型データからint型データの減算を行い、減算後のデータを検索 ...