【MySQL】SQLで誕生日を計算する
誕生日が日付Aの人が、日付Bのとき何歳か計算する。
月数を算出する日付関数があれば、「切り捨て(AからBの月数/12)」の計算式で算出できる。
MySQLには月数を算出する日付関数はないようなので、これでどうでしょう。
select year(B) - year(A) - (date_format(B, '%m%d') < date_format(A, '%m%d')) as age
いつも頭の中でやっていることと同じ。年を引き算して、誕生日が来ていたらそのまま。誕生日がまだだったら1歳引く。
true(真)が1、false(偽)が0になるのを利用して、端折って書いてます。
例えば
1990年2月20日生まれの人が今何歳か?
set @A = current_date(); set @B = '1990-02-20'; select year(@A) - year(@B) - (date_format(@A, '%m%d') < date_format(@B, '%m%d')) as age;
ある学校の生徒が2010年9月1日時点で何歳か?
select year('2010-09-01') - year(birthday) - (date_format('2010-09-01', '%m%d') < date_format(birthday, '%m%d')) as age from student;
コメント