重複の可能性:
T-SQL で年齢を年、月、日で計算する方法
私は単純に生年月日変数を使用して年齢 (年) を計算しようとしています
1932-04-29 00:00:00.000
および SQL Server の SYSDATETIME( )。
SELECT year(Sysdatetime() - Birthdate) as Age
プロデュース (驚くべきことに) : 1980
私は何を取りこぼしたか?私は80を得ると思っていました!
重複の可能性:
T-SQL で年齢を年、月、日で計算する方法
私は単純に生年月日変数を使用して年齢 (年) を計算しようとしています
1932-04-29 00:00:00.000
および SQL Server の SYSDATETIME( )。
SELECT year(Sysdatetime() - Birthdate) as Age
プロデュース (驚くべきことに) : 1980
私は何を取りこぼしたか?私は80を得ると思っていました!
年齢の計算は、一見したように単純ではありません。
使用Datediff
すると、年齢ではない絶対年数で違いが得られます。
例えば
select DATEDIFF(yy, '1980-12-31', getdate())
問題の人物の年齢は 31 ですが、32 が返されます。
これは、あなたの目的には十分正確かもしれません。より正確ですが、それでも間違っています。使用できます
select convert(int,DATEDIFF(d, '1933-10-31', getdate())/365.25)
これはほとんどの場合正しいです。
または、より複雑な関数を書くことができます....
CREATE Function [dbo].[F_GetAge]( @RefDate Datetime,@Birthdate Datetime) Returns Int as
/*
200040916 Thomas Wassermann
*/
Begin
Declare @Alter Int
if @RefDate>@Birthdate
Select @Alter=(DatePart(yy,CAst(@Refdate-@Birthdate -1 as Float))-1900)
else select @Alter=0
Return(@Alter)
end
速くて汚い。うるう年などで、いくつかのエラーが発生する可能性があります。
-- quick and dirty age in years
declare @birthday datetime
set @birthday = '19320429'
-- this is pretty close, but could have problems with leap years, etc.
select floor(datediff(day, @birthday, CURRENT_TIMESTAMP) / 365.25)
ここで何が起こるかは次のとおりです。
差を正しく計算するには、DATEDIFF を使用します: http://msdn.microsoft.com/en-us/library/ms189794.aspx
しかし、それにはまだ問題があります。完全な解決策については、こちらを参照してください:生年月日と getDate() に基づいて年齢 (年) を計算する方法