5016 年齢計算 はくぶん 2013-12-29 07:13:19
SQL構文で今日現在の年齢を求めろと言われたら、
どういう構文を書くだろうか。

birthdayというカラムに生年月日が入っているとすると、
-------------------------------------------------------
select if(month(birthday) * 100 + day(birthday) <= month(curdate()) * 100 + day(curdate()), year(curdate()) - year(birthday), year(curdate()) - year(birthday) - 1);
-------------------------------------------------------
という風に、自分なら書くだろうと思う。
その年の誕生日が来ているかどうか、条件分岐する必要があるからだ。

ところが、ネットで調べると、出て来たのはこれ。
----------------------------------------------------------------
select year(curdate()) - year(birthday) - (right(curdate(), 5) < right(birthday, 5));
----------------------------------------------------------------
年齢計算だというのに条件分岐がない。
なぜこれで出来るの?と思ったが、出来ることに気が付いた。
--------------------------------------
(right(curdate(), 5) < right(birthday, 5))
--------------------------------------
この部分が真なら1を、偽なら0を返すからである。
条件分岐はしていないが、自然と条件分岐になっているのである。

久し振りに感動した。

例の四捨五入して小数2桁まで求める、
------------------------
int (a * 100 + 0.5) / 100
------------------------
と同じくらい感動した。
メッセージ文字数:959/987