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のREGEXPで半角記号を検索したい場合の対応方法
MySQLのREGEXPで半角記号を検索したい場合\\を付けてエスケープしないと ...
-
-
MySQLでWhere句をつけてdumpファイルを出力する方法
MySQLであるテーブルからWhere句をつけて、絞った結果をダンプさせたかった ...
-
-
MySQLで指定の順にデータをソートする方法(ORDER BY FIELD)
MySQLで指定した順にソートしてデータを取り出したい。通常だと主キーだったり何 ...
-
-
お名前.comのレンタルサーバ(SDサーバ)にMySQLデータのインポートする方法
お名前.comのレンタルサーバにそこそこ大きいサイズのMySQLデータを移行した ...
-
-
MySQLでLIKE検索時に大文字・小文字・半角・全角全て区別したい
以前にMySQLであいまい検索時に大文字小文字は区別しないが、それ以外は全て区別 ...