2011-07-07 2 views
1

Duplicate possible:
How to calculate age in T-SQL with years, months, and daysâge Calculer d'une personne dans SQL

Il semble que quelque chose de simple, mais il ne semble pas fonctionner pour moi. Je veux calculer l'âge de quelqu'un de base à deux dates en SQL.

J'ai fait DATEDIFF (année, Birthdate, ReferenceDate) et cela ne me donne pas toujours le bon âge.

Par exemple

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

donne 30, alors qu'il devrait encore être 29. Est-il possible de le faire?

Merci,

+4

Votre datepart est 'year', il considère que' 1981' et '2011'. Jetez un oeil à la [documentation] (http://msdn.microsoft.com/en-us/library/ms189794.aspx). Aussi, jetez un oeil à cette question http://stackoverflow.com/questions/57599/how-to-calculate-age-in-t-sql-with-years-months-and-days – Jacob

+1

Il y a un article qui explique il, il ne calcule pas l'année entre les dates, il calcule le nombre d'années entre les années. http://www.sqlteam.com/article/datediff-function-demystified –

Répondre

7

Essayez ceci ...

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

Il compare simplement la différence de l'année et si elle est supérieure puis un an retranche, sinon elle renvoie la valeur.

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 (aa, date de naissance, GETDATE()) - AFFAIRE QUAND MOIS (BirthDate)> MOIS (GETDATE()) \t \t OU (MOIS (BirthDate) = mois (GETDATE()) \t \t \t et par jour (BirthDate)> JOUR (GETDATE())) THEN 1 0 ELSE END que l'âge; –

0

Essayez cette

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) 
Questions connexes