可能重复:
如何在 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())
将返回 32,而相关人员的年龄为 31。
对于您的目的,这可能足够准确。更准确,但仍然错误,可以使用
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() 计算年龄(以年为单位)