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が起動も再起動もできない際の対応方法
サイトで障害が発生した。FTPやSSH接続は出来るけどサイト自体は表示されない。 ...
-
-
MySQLで特定カラムの
タグを改行コードに一括置換させる方法MySQLで特定カラムの<br>タグを改行コードに一括置換したかった ...
-
-
MySQLでwhere句を使ってカラム指定でデータをコピーする方法
MySQLで大量のデータを保存しているテーブルがあり、そのデータを絞った上で尚且 ...
-
-
MySQLで歯抜けになっているint型の数値を取得する
MySQLで歯抜けになっているシーケンス番号を 取得したいケースがあった。 ■ソ ...
-
-
さくらインターネットでCronからmysqldumpすると0バイトのファイルが生成される
さくらインターネットのレンタルサーバでmysqldumpした結果をファイルとして ...