ITProに載ってました。こちらです。
ちょうどDBに文字列形式で yyyyMMdd 形式で保存された生年月日から年齢を求める必要があったので助かりました。
具体的にはこう書けばいいみたいです。
(今日の日付-誕生日)/10000の小数点以下切捨て。
ということで、VB.Netバージョンのソースです。
DataTableのBirthday列に文字列で yyyyMMdd と保存されるとした場合です。
(CInt(DateTime.Today.ToString("yyyyMMdd")) - CInt(dtbl.Rows(0).Item("Birthday"))) / 10000
ちなみにこれだと小数点形式で帰ってくるので、小数点以下を切り捨てて、文字列で出す方法です。
.ToStringメソッドで書式指定してやります。
((CInt(DateTime.Today.ToString("yyyyMMdd")) - CInt(dtbl.Rows(0).Item("Birthday"))) / 10000).ToString("##")
数値型.ToString()での書式指定は結構便利なものですね。
ただ、この年齢求める方法は業務による年齢定義によって異なるという点が重要です。(たとえば誕生日の前日段階ですでの年齢がインクリメントするような定義など)
そこらへんの細かい話はこちらに論議されてました。
まあ、今回作ってるソフトの要件では概算年齢でもかまわないみたいなので、そのへんは深く考えていません。
追伸:
AccessのSQLで書くとこうなります。
(生年月日が文字列として "yyyyMMdd" 形式で列に格納されているとします。列名は "Birthday")
int((int(Format(Date(),"yyyymmdd")) - int(Birthday) )/ 10000)