Comment calculer l'âge / le nombre d'années entre deux dates

Dupliquer possible:
Comment calculer l'âge dans T-SQL avec des années, des mois et des jours

Dans le cadre d'un projet sur lequel je travaillais, je devais calculer l'âge d'une personne lorsqu'elle se joint au système; Après avoir regardé sur Internet, j'ai trouvé plusieurs façons de le faire, mais la plupart d'entre eux avaient de légers problèmes quand il s'agissait d'une année bissextile.

La solution ci-dessous est comment je calcule le nombre d'années passées / âge. J'espère que cela aide les autres

Vous devez append la méthode suivante à votre database:

CREATE FUNCTION [dbo].[fnCalAge] (@DiffFrom DATE, @DiffTo DATE) RETURNS INT AS BEGIN DECLARE @NumOfYears INT SET @NumOfYears = (SELECT DATEDIFF(YEAR, @DiffFrom, @DiffTo) + CASE WHEN MONTH(@DiffTo) < MONTH(@DiffFrom) THEN -1 WHEN MONTH(@DiffTo) > MONTH(@DiffFrom) THEN 0 ELSE CASE WHEN DAY(@DiffTo) < DAY(@DiffFrom) THEN -1 ELSE 0 END END) IF @NumOfYears < 0 BEGIN SET @NumOfYears = 0; END RETURN @NumOfYears; END 

Vous l'appelez ensuite dans votre requête SQL, semblable au suivant:

 SET DATEFORMAT dmy SELECT dbo.fnCalAge(CAST('20/06/1987' AS DATE), CAST('20/06/2013' AS DATE)) 

En supposant @bDate est datetime de date de naissance et @today est la date d'aujourd'hui, alors …

  Declare @bDay Date = '31 dec 2000' Declare @today Date = cast(getdate() as date) Select datediff(Year, @bDay, @today) - case When datepart(dayofYear, @today) < datepart(dayofYear, @bDay) Then 1 Else 0 End 

Remplacer les employés avec DOB pour l'âge. Remplacez sysdate par votre date, telle que to_date ('28 -DEC-2012 '):

 SELECT empno, ename, hiredate, TRUNC(MONTHS_BETWEEN(sysdate, hiredate)/12) years_of_service FROM scott.emp /