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

Requêtes et SQL. Discussion :

[A-02] [DateDiff] Calculer âge des clients avec leur date de naissance


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut [A-02] [DateDiff] Calculer âge des clients avec leur date de naissance
    Bonjour à tous.

    J'ai fait cette requête qui doit afficher l'âge des clients :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DateDiff('yyyy',DateNaissCli,Date()) As AgeCli
    FROM CLIENT;
    Or l'âge n'est pas tout à fait correct.
    Quand on prend cet exemple (ma date de naissance) :
    Date de naissance : 14/05/1987
    Date du jour : 23/01/2009
    Ma requête me retourne 22.
    Il est vrai que si l'on fait 2009-1987 on obtient 22ans, cependant je ne ferai 22ans que le 14 mai !

    Merci d'avance à ceux qui me liront
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Bonjour,

    Peut-être trouveras-tu ta réponse dans la FAQ :
    http://access.developpez.com/faq/?page=dates#HowOld

    En espérant t'aider.
    J'aime les gâteaux.

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut Demco et azertix,

    autrement avec la méthode d'Argyronet:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (date()-DateNaissCli)\365.25
    qui reste un bonne approximation.


  4. #4
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Merci pour vos réponses.
    Je cherchais plutôt une solution en SQL, donc je vais utiliser la méthode citée par Vodiem, mais je prends note des fonctions VBA de la FAQ pour une utilisation future.

    Bonne fin de journée à vous deux
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    A priori sans approximation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Year(date) - Year(dateNaissance) + (Format(dateNaissance, "mmdd") > Format(date, "mmdd"))
    FROM Matable

  6. #6
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Merci bien, ça fonctionne
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    permet moi Tofalu de corriger:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Year(date()) - Year(dateNaissance) + (Format(dateNaissance, "mmdd") < Format(date(), "mmdd"))
    FROM Matable

  8. #8
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    C'est noté
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  9. #9
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Ca ne fonctionne pas en fait
    Quand je calcule mon propre âge, ça me retourne 22 alors que je n'aurai 22 qu'en mai
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  10. #10
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour Azertix, coucou aux autres ,

    Essaie ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DATEDIFF(m, DateNaissance, DATE())/12
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Absolument juste (tient compte du fait que l'anniversaire n'est pas encore passé).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("YYYY", DateNaiss, Date) + (DateSerial(Year(Date), Month(DateNaiss), Day(DateNaiss)) > Date)
    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  12. #12
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Erf, on revient à mon DateDiff.
    Ta proposition est correcte et même très (trop) précise, vu que ça me retourne 21,7
    Du coup j'ai juste converti en entier le résultat :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Int(DATEDIFF('m', DateNaissCli, DATE())/12) AS AgeCli

    Merci à tous pour vos réponses et à une prochaine sur le forum
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  13. #13
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Dernier post mais important quand même, car après discussion par MP avec Domi2, il se trouve que seule sa proposition retourne un résultat correct à 100% :
    Citation Envoyé par azertix
    Citation Envoyé par Domi2
    Citation Envoyé par azertix
    Citation Envoyé par Domi2
    Bonjour,

    Nos derniers posts s'étant pratiquement croisés, je ne sais pas si tu as vu la solution que je proposais...

    C'est assez "propre"...

    Domi2
    Oui j'ai vu ton post, mais si on regarde ce que j'ai fait dans mon dernier post et ce que tu m'as proposé, le résultat est le même non ?

    A+
    Azertix
    As-tu essayé avec un client dont la date de naissance est le 30.01.XXXX (par rapport à aujourd'hui) ?

    Et avec un client dont la date de naissance est le 01.02.XXXX ?

    Domi2
    Bien vu !
    Dans les deux cas cités, seule ta proposition retourne le bon âge.
    Je post dans le topic, pour les personnes qui auraient le même problème que moi.

    Gros merci à toi
    Donc solution à retenir :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("YYYY", DateNaiss, Date) + (DateSerial(Year(Date), Month(DateNaiss), Day(DateNaiss)) > Date)
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  14. #14
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par Tofalu Voir le message
    A priori sans approximation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Year(date) - Year(dateNaissance) + (Format(dateNaissance, "mmdd") > Format(date, "mmdd"))
    FROM Matable
    Vmodiem, je persiste avec ma version.

    Imaginons, DateNaisssance : 28/05/1979

    Le 27/05/1979, la personne a 29 ans

    Year(date)-Year(DN)=2009-1979 = 30
    "0528">"0527" => Vrai => -1

    30+(-1) = 29 ans
    Le 28/05/1979, la personne a 30 ans

    Year(date)-Year(DN)=2009-1979 = 30
    "0528">"0528" => Faux => 0

    30+0 = 30 ans
    Le 29/05/1979, la personne a toujours 30 ans

    Year(date)-Year(DN)=2009-1979 = 30
    "0528">"0529" => Faux => 0

    30+0 = 30 ans
    Le 29/12/1979, la personne a toujours 30 ans

    Year(date)-Year(DN)=2009-1979 = 30
    "0528">"1225" => Faux => 0

    30+0 = 30 ans

  15. #15
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Erf, en fait j'aurais dû lancer un défi

    Après test des deux "dates sensibles" de Domi2 avec les version proposées par Vodiem et Tofalu, j'ai constaté que la proposition de Tofalu fonctionne aussi, mais pas la dernière proposition de vodiem
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  16. #16
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    As tu au moins essayé ma solution sans la correction de vmodiem qui la fausse ? Si elle échoue peut tu donner un exemple ?

  17. #17
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Ah mince on s'est croisés, j'ai fait les tests et j'ai édité mon post

    Edit : Je viens aussi de tester le cas où un client serait né un 29 février (année bisextile) :
    reqTofalu : ok
    reqvodiem : pas ok
    reqDomi2 : ok
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  18. #18
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Ayant pris la discussion "en route", je n'avais pas essayé toutes les variantes proposées.

    La solution de Tofalu, que je viens de tester, me semble remporter "la palme"...

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  19. #19
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Donc elle serait mieux optimisée que ta version ?
    Si ma réponse vous a été utile pensez à voter Pour

    Avant de poster sur le forum Access :
    FAQ > SOURCES > COURS > FORUM > GOOGLE
    Pas de question par MP ou je mords


  20. #20
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par azertix Voir le message
    Donc elle serait mieux optimisée que ta version ?
    Je ne sais pas, le calcul est à peu prés le même. Celui de domi compare la date actuelle ramenée à l'année de naissance pour savoir si bébé était né ou pas à cette période de l'année, la mienne vérifie juste si le jour actuel est placé avant ou après celui de la naissance.

    Mon calcul se fait sur une comparaison de chaînes de caractères (d'où l'importance du Format (mmdd) ), celui de domi est purement numérique. La réflexion est la même puisque l'on se sert du résultat de la comparaison (un booléen qui vaut 0 ou -1) pour modifier le calcul initial basé sur l'année.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2014, 08h36
  2. Liste des tables avec leur nombre d'enregistrements
    Par emilie1t dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/10/2012, 16h28
  3. Réponses: 4
    Dernier message: 19/05/2006, 23h14
  4. Réponses: 9
    Dernier message: 02/05/2006, 21h17

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