4

重複の可能性:
T-SQL で年齢を年、月、日で計算する方法

私は単純に生年月日変数を使用して年齢 (年) を計算しようとしています

1932-04-29 00:00:00.000

および SQL Server の SYSDATETIME( )。

SELECT year(Sysdatetime() - Birthdate) as Age

プロデュース (驚くべきことに) : 1980

私は何を取りこぼしたか?私は80を得ると思っていました!

4

4 に答える 4

8

年齢の計算は、一見したように単純ではありません。

使用Datediffすると、年齢ではない絶対年数で違いが得られます。

例えば

select DATEDIFF(yy, '1980-12-31', getdate())

問題の人物の年齢は 31 ですが、32 が返されます。

これは、あなたの目的には十分正確かもしれません。より正確ですが、それでも間違っています。使用できます

select convert(int,DATEDIFF(d, '1933-10-31', getdate())/365.25)

これはほとんどの場合正しいです。

または、より複雑な関数を書くことができます....

于 2012-10-31T15:33:58.283 に答える
1
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
于 2012-10-31T15:43:21.603 に答える
1

速くて汚い。うるう年などで、いくつかのエラーが発生する可能性があります。

-- 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)
于 2012-10-31T15:59:34.817 に答える
0

ここで何が起こるかは次のとおりです。

  1. 両方の日付は、1900-01-01T00:00:00 からの日数として float に変換されます
  2. フロートは互いに減算され、それらの間の日数が得られます
  3. 基準日に日数を加算することで、結果が日付に変換されます。

差を正しく計算するには、DATEDIFF を使用します: http://msdn.microsoft.com/en-us/library/ms189794.aspx

しかし、それにはまだ問題があります。完全な解決策については、こちらを参照してください:生年月日と getDate() に基づいて年齢 (年) を計算する方法

于 2012-10-31T15:37:18.417 に答える