|
■No59194 (ながり さん) に返信 > 年齢を計算したいのですが、どのようにすればいいでしょうか?
データベースや言語が何であれ、年齢計算を行う場合においては、 基本的には、以下の 2 つのプロセスをとることになるでしょう。
(1) 「生年月日」と「対象日(たとえば今日)」の“年”の差を求める。 (2) 「生年月日」と「対象日」の“月日”の大小を比較して、(1)を補正する。
年だけで判定するケースでは (1) だけで算出できますが、たとえば 「今年で20歳になるけれど、まだ誕生日を迎えていない」人というのは 19歳として扱いますよね。なので、(2)の判定も必要になります。 ----------
そして、SQL Server の場合は――
(1) を求めるのは簡単ですよね。それぞれの日付について 『YEAR(日付値)』を使えば西暦が得られますので、それらの差を求めるだけです。 もしくは『DATEDIFF(YEAR, 生年月日, 対象日)』でも同じ結果が得られます。
(2) についてはいろいろなやり方がありますが、たとえば、それぞれの日付値を (案1) CONVERT 関数を使って切り出し、文字列として取得 RIGHT(CONVERT(CHAR(10), 日付, 111), 5) → 'MM/DD' 形式 RIGHT(CONVERT(CHAR(8) , 日付, 112), 4) → 'MMDD' 形式
(案2) Month, Day 関数を使って算出し、数値として取得 Month(日付) * 100 + Day(日付) → MMDD な数値(101〜1231) などで変換し、CASE 文などを使って (1) を補正すれば OKです。
----------
なお、要件によって年齢の数え方が変わる事にも注意してください。
「数え年」においては、生まれた年を1歳として、毎年1月1日を迎えるごとに+1歳します。
一方、我々がよく目にする暦年齢では、生まれた年を0歳として、誕生日を迎えるごとに+1歳します。
民法を考慮した満年齢では、生まれた年を0歳として、誕生日の前日を迎えるごとに+1歳します。 (誕生日当日の 00:00 に +1 歳されるのではなく、前日の24:00に +1 歳されるという考えに基づくもの) http://goo.gl/DvN0L
|