可能重复:
How to calculate age in T-SQL with years, months, and days
我只是尝试使用生日变量
计算年龄(以年为单位)1932-04-29 00:00:00.000
SQL Server中的和SYSDATETIME(),其中是
SELECT year(Sysdatetime() - Birthdate) as Age
产生(令人惊讶):1980
我错过了什么?我期望得到80!
答案 0 :(得分:8)
计算年龄并不像第一次出现那么简单。
如果你使用Datediff
,你会得到绝对年份的差异,而不是年龄。
例如
select DATEDIFF(yy, '1980-12-31', getdate())
将返回32,而有关人员的年龄为31岁。
这可能足以满足您的需要。 更准确,但仍然错误,你可以使用
select convert(int,DATEDIFF(d, '1933-10-31', getdate())/365.25)
当时大多数。
或者你可以写一个更复杂的功能......
答案 1 :(得分: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
答案 2 :(得分: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)
答案 3 :(得分:0)
这里会发生以下情况:
要正确计算差异,请使用DATEDIFF:http://msdn.microsoft.com/en-us/library/ms189794.aspx
但仍存在问题。请参阅此处以获取完整的解决方案:How to calculate age (in years) based on Date of Birth and getDate()