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 MySQL Discussion :

Calcul de dates, résulat en mois


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut Calcul de dates, résulat en mois
    Bonjour,
    J'essaie de calculer la différence entre deux dates, mais je veux le résultat en mois. Par exemple, je veux calculer le nombre de mois entre le 25/02/2006 et le 13/05/2011.

    J'ai déjà calculé des ages, ce qui me fait jouer avec les années uniquement, mais quand il est question d'avoir le résultat en mois, je bloque.

    J'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATE_FORMAT(curdate()-i.buy_date,'%m')
    mais ça ne me donne rien de cohérent.

    Je me pose une question :
    Si je fais juste
    Est ce que je reçois un résultat en jours ? car dans ce cas si je divise par 12, ça pourrait me donner la solution.. ?
    Pouvez-vous me le confirmer s'il vous plait

    Je vous remercie

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Bon, je viens d'essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (DATEDIFF(curdate(),i.buy_date))/12
    mais ce n'est pas cohérent non plus.

    Je dois très mal m'y prendre... heeeelp

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    faudrait que tu divises par 30 et non 12...

    datediff te donne des jours donc pour avoir des mois il suffit de diviser par 30...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Cette requête retourne 63 mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT PERIOD_DIFF(
                                           EXTRACT(YEAR_MONTH FROM (STR_TO_DATE('13/05/2011', '%d/%m/%Y'))),
                                           EXTRACT(YEAR_MONTH FROM (STR_TO_DATE('25/02/2006', '%d/%m/%Y')))
                    ) as nbMois

  5. #5
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    de toute façon ma méthode et la tienne sont vraies à plus ou moins 1 mois près...
    tout dépend comment on gère les arrondis pour obtenir un résultat le plus juste possible (à 15 jour près)...

    datediff et la division sont plus justes (en général) que period_diff qui ne tient pas compte des jours dans chaque mois considérés...

    quand tu as un faible écart, comme entre 15 et 23, ça donne le bon résultat mais si c'était 1 et 30 tu aurais une erreur d'un mois plein quasiment...

    si tu cherches la performance en plus (sur un grand nombre d'entrées), datediff et la division seront amplement plus efficaces...

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 50
    Points : 71
    Points
    71
    Par défaut
    bonjour, comme te l'a dit éric un mois compte 30jours...

    - si tu veut récupérer le nombre de mois "exact" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEDIFF(CURDATE(),ta_date)/30;
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEDIFF(CURDATE(),"2012-04-01")/30;
    donne 4.6 (mois).

    - si tu veut récupérer un nombre de mois entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ROUND(DATEDIFF(CURDATE(),ta_date)/30);
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ROUND(DATEDIFF(CURDATE(),"2012-04-01")/30);
    donne 4 (mois).

    bien sur le premier paramètre (CURDATE()) peut être remplacé par une autre date.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    En effet, j'ai réussi avec PERIOD_DIFF.
    Cette fonction est faite exprès. je ne l'avais pas vu dans la doc Mysql au début mais c'est bien la meilleure.

    Merci pour vos réponses

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

Discussions similaires

  1. Calcul de dates en AN Mois jours
    Par brutus437 dans le forum Excel
    Réponses: 1
    Dernier message: 06/06/2010, 16h23
  2. calculer la date plus 6 mois
    Par Daniela dans le forum Excel
    Réponses: 2
    Dernier message: 11/12/2009, 09h20
  3. [Dates] Calculer la date dans un mois
    Par jackbauer33 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2008, 22h35
  4. Calcul de dates : début de semaine, de mois, de trimestre
    Par pyxosledisciple dans le forum Access
    Réponses: 13
    Dernier message: 22/02/2006, 08h07
  5. Calcul de date en années ET mois
    Par priest69 dans le forum Access
    Réponses: 2
    Dernier message: 26/09/2005, 18h53

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