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 | |||