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

将返回 32,而相关人员的年龄为 31。

对于您的目的,这可能足够准确。更准确,但仍然错误,可以使用

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 以来的天数
  2. 浮点数彼此相减,得出它们之间的天数
  3. 通过将天数添加到基准日期,结果将转换回日期

要正确计算差异,请使用 DATEDIFF:http: //msdn.microsoft.com/en-us/library/ms189794.aspx

但这仍然存在问题。请参阅此处获取完整的解决方案:如何根据出生日期和 getDate() 计算年龄(以年为单位)

于 2012-10-31T15:37:18.417 回答