IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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
    Profil pro
    Inscrit en
    octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 75
    Points : 41
    Points
    41
    Par défaut 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
    Profil pro
    Inscrit en
    mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    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é
    Profil pro
    Inscrit en
    octobre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2005
    Messages : 745
    Points : 166
    Points
    166
    Par défaut
    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
    Profil pro
    Inscrit en
    octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 75
    Points : 41
    Points
    41
    Par défaut
    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
    Inscrit en
    août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut
    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
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : juillet 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut DateDiff..
    Essaye :

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

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 878
    Points : 49 623
    Points
    49 623
    Billets dans le blog
    1
    Par défaut
    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 +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Nouveau membre du Club
    Inscrit en
    septembre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : septembre 2002
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    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
    Inscrit en
    septembre 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : septembre 2002
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    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
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    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
    Inscrit en
    juin 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut 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
    Inscrit en
    juin 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 26
    Points : 13
    Points
    13
    Par défaut 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

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 878
    Points : 49 623
    Points
    49 623
    Billets dans le blog
    1
    Par défaut
    Vous avez parfaitement raison. L'âge avec le 365.2425 est approximatif et relativement juste dans certaines conditions.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de l'age d'une personne
    Par berwoje dans le forum iReport
    Réponses: 1
    Dernier message: 20/11/2015, 11h56
  2. [WD14] Calcul de l'age d'une personne automatiquement
    Par Gzorglub dans le forum WinDev
    Réponses: 13
    Dernier message: 13/01/2010, 11h59
  3. calculer l'age d'une personne
    Par Daniela dans le forum Débuter
    Réponses: 4
    Dernier message: 13/07/2009, 14h26
  4. Calcul de l'age d'une personne
    Par batstoon dans le forum Oracle
    Réponses: 2
    Dernier message: 04/12/2006, 13h50
  5. Calculer l'age d'une personne
    Par Oberown dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 27/09/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo