0
votes

Calculer l'âge sur le terrain entier

Le champ de date que je dois calculer l'âge sur est yyyymmdd .

J'ai essayé ci-dessous et converti getDate à yyyymmdd au format mais ne semble pas sembler avoir l'âge à partir de cela. J'ai essayé avec datrodiff mais ne peut pas sembler le faire fonctionner non plus. xxx


1 commentaires

Maintenant, si vous avez stocké votre DOB à l'aide d'une date date DataType tout serait tellement plus facile.


3 Réponses :


0
votes

Essayez ceci ....

    Create function [dbo].[GetAge](@dayOfBirth datetime, @today datetime)
       RETURNS varchar(100)
    AS

    Begin
      DECLARE @tmpdate datetime, @date datetime, @years int, @months int, @days int

    SELECT @tmpdate = @dayOfBirth

    SELECT @years = DATEDIFF(yy, @tmpdate, @today) - CASE WHEN (MONTH(@tmpdate) > MONTH(@today)) OR (MONTH(@tmpdate) = MONTH(@today) AND DAY(@tmpdate) > DAY(@today)) THEN 1 ELSE 0 END
    SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)
    SELECT @months = DATEDIFF(m, @tmpdate, @today) - CASE WHEN DAY(@tmpdate) > DAY(@today) THEN 1 ELSE 0 END
    SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
    SELECT @days = DATEDIFF(d, @tmpdate, @today)

    return cast(@years as varchar(2)) + ' years,' + cast(@months as varchar(2)) + ' months,' + cast(@days as varchar(3)) + ' days'
    end


Select  CLAIM.BTHDAT,dbo.[GetAge](CLAIM.BTHDAT,getdate()) From CLAIM


0 commentaires

1
votes

En supposant que vous voulez vieillir dans des années ... Que diriez-vous de datrodiff () xxx


1 commentaires

Couleur-moi surprise que cela fonctionne. Je ne pensais pas que la datrodiff prendrait une chaîne de Yyyymmdd. En théorie, la clause gauche () est inutile.



0
votes

Voici une option pour obtenir l'âge avec précision, avec l'hypothèse que toutes les dates suivront le format yyyymmdd code> et seront des dates valides.

SELECT CLAIM.BTHDAT
 ,DATEDIFF( YY, CONVERT(CHAR(8),CLAIM.BTHDAT), GETDATE()) 
   - CASE WHEN SUBSTRING( CONVERT( char(8), GETDATE(), 112), 5, 4) < SUBSTRING( CONVERT( char(8), BTHDAT), 5, 4)  THEN 1 ELSE 0 END
 FROM CLAIM


0 commentaires