Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Calcul de l'age d'une personne


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Calcul de l'age d'une personne
    Bonjour,
    j'utilise une base SQL Server dans laquelle j'ai la date de naissance de la personne.

    Comment puis-je calculer l'age de la personne par rapport à la date de naissance et la date du jour (ou une date saisie).

    Je pensais faire une différence en nombre de jour et divisé par 365 mais le problème ce sont les années bisextilles, ce ne sera pas juste!

    Merci

  2. #2
    Membre averti
    Ne te prend pas la tête à essayer de faire des calculs, il existe une fonction T-SQL qui te permet de faire la différence entre deux dates.

    Il s'agit de DATEDIFF().

    Tu trouveras toues les informations nécessaires dans l'aide SQL Server.
    Bon courage pour la suite.

  3. #3
    Membre habitué
    ou un simple :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    SELECT    YEAR(GETDATE()) - YEAR(DatNaiss) AS age
    FROM         TaTable

  4. #4
    Membre du Club
    Cette dernière méthode ne peut pas convenir car tu ne tiens pas compte du mois dans l'année...

  5. #5
    Membre du Club
    bonjour
    voila la réponse:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    select*,substring(convert(varchar(10),getdate()-datnaiss,103),9,10)
     
    from tatable

  6. #6
    Futur Membre du Club
    DateDiff..
    Essaye :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    select DateDiff(getDate(),DateNaissance) from ...

  7. #7
    Rédacteur

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT CAST(CURRENT_TIMESTAMP - DATE_NAISSANCE AS FLOAT) / 365.2425 AS AGE_AN_DECIMAL

    A +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  8. #8
    Nouveau membre du Club
    Cela ne fonctionne pas non plus car si tu fais ça

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST(cast('01/03/2007' as datetime) - cast('01/03/1980' as datetime)  AS FLOAT) / 365.2425 AS AGE_AN_DECIMAL
    FROM contrat


    Cela te retourne 26.998500995913673.
    Pour ma part, si la fonction était correcte, elle devrait retournée 27.xxxxxx

    Je suis également à la recherche de cette fonction.

  9. #9
    Nouveau membre du Club
    Voilà ma contribution pour cette fonction de calcul, ça vaut ce que ça vaut, mais au moins ça a l'air de marcher.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    create function dbo.getAge(@dDate1 datetime, @dDate2 datetime) returns int
    as
    begin
        declare @iAge int;
        select @iAge = datediff(year, @dDate1, @dDate2);
        if (dateadd(year, @iAge,@dDate1) > @dDate2)
            set @iAge = @iAge - 1;
     
        return @iAge;
    end
    go

  10. #10
    Membre averti
    Citation Envoyé par SQLpro Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT CAST(CURRENT_TIMESTAMP - DATE_NAISSANCE AS FLOAT) / 365.2425 AS AGE_AN_DECIMAL

    A +
    fonctionne très bien... il ne faut juste pas faire la même erreur que Alexs et se tromper dans les format des dates...
    ****** Analyse/Développeur .Net

  11. #11
    En attente de confirmation mail
    plus complet, me semble-t-il
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT    CAST(CAST(getdate() -  dbirthdate as Float)/365.2425 as int) AS age

  12. #12
    Membre à l'essai
    Calcul de l'âge
    Bonjour,
    Je suis tombé sur ce vieux post en recherchant la formule pour le calcul de l'âge.

    Et j'avoue que ce 365.2425 ne me plaît pas trop : ça sent le problème d'arrondi...
    Exemple qui ne fonctionne pas : nous sommes aujourd'hui le 17/03/2017 et je veux connaître l'âge par rapport au 18/03/1900..
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT CAST(CAST(getdate( ) - "19000318" as Float) / 365.2425 as int) AS age

    Résultat = 117 --> KO, aujourd'hui l'âge est 116 et sera égal à 117 à partir du 18/03/2017

    Je propose plutôt la formule suivante :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT YEAR(GETDATE( )) - YEAR(Z_CHAMP) - CASE WHEN MONTH(GETDATE( )) < MONTH(Z_CHAMP) OR (MONTH(GETDATE( )) = MONTH(Z_CHAMP) AND DAY(GETDATE( )) < DAY(Z_CHAMP)) THEN 1 ELSE 0 END AS age


    Petite explication : YEAR(GETDATE( )) - YEAR(Z_CHAMP) fournit l'âge obtenu en fin d'année et ensuite on retranche éventuellement 1 année si le jour de l'année n'est pas encore écoulé...

  13. #13
    Rédacteur

    Vous avez parfaitement raison. L'âge avec le 365.2425 est approximatif et relativement juste dans certaines conditions.

    A +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

###raw>template_hook.ano_emploi###