2011-07-07 87 views
1

可能重复:
How to calculate age in T-SQL with years, months, and days计算年龄

看起来简单的东西,但它似乎并没有为我工作。我想根据SQL中的两个日期来计算某个人的年龄。

我做了DATEDIFF(year,Birthdate,ReferenceDate),它并不总是给我适当的年龄。

例如

DATEDIFF(year,'1981-07-05',2011-07-01') 

给出30,而它仍然应该是29.有没有办法做到这一点?

感谢,

+4

您的日期部分是'year',所以只考虑'1981'和'2011'。查看[documentation](http://msdn.microsoft.com/en-us/library/ms189794.aspx)。此外,havev看看这个问题http://stackoverflow.com/questions/57599/how-to-calculate-age-in-t-sql-with-years-months-and-days – Jacob

+1

有一篇文章,解释它不计算日期之间的年份,它计算年份之间的年数。 http://www.sqlteam.com/article/datediff-function-demystified –

回答

7

尝试......

SELECT CASE WHEN 
(DATEADD(year,DATEDIFF(year, @datestart ,@dateend) , @datestart) > @dateend) 
THEN DATEDIFF(year, @datestart ,@dateend) -1 
ELSE DATEDIFF(year, @datestart ,@dateend) 
END 

它只是比较了一年差异,如果是更大然后减去一年,否则返回值。

0
 
Declare @Date1 datetime 
Declare @Date2 datetime 


Select @Date1 = '07/25/1984' 
Select @Date2 = GetDate() 

select CASE 
WHEN dateadd(year, datediff (year, @Date1, @Date2), @Date1) > @Date2 
THEN datediff (year, @Date1, @Date2) - 1 
ELSE datediff (year, @Date1, @Date2)END as Age 
+0

SELECT DATEDIFF(yy,BirthDate,GETDATE()) - CASE 当月(出生日期)> MONTH(GETDATE()) \t \t OR(MONTH (出生日期)= MONTH(GETDATE()) \t \t \t AND DAY(出生日期)> DAY(GETDATE()))THEN ELSE 0 END AS年龄; –

0

尝试这个

select 
    (datediff(yy,'1981-07-08',getdate()))-(datepart(yy,(convert(datetime,convert(int,dateadd(yy,datediff(yy,'1981-07-08',getdate()),'1981-07-08'))-convert(int,dateadd(yy,-1,getdate())))))-1900)