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

Langage SQL Discussion :

Mysql récupérer les jours d'une période


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut Mysql récupérer les jours d'une période
    Bonjours à tous et à toutes,

    J'aimerai savoir s'il est possible de récupérer les dates d'une période.
    En effet, j'aimerai qu'à partir d'une date de début et d'une date de fin, ma requête me renvoie toutes les dates de cette période.

    Exemple:
    - DateDeb: "2011-01-01"
    - DateFin: "2011-01-04"

    Résultat:
    2011-01-01
    2011-01-02
    2011-01-03
    2011-01-04


    Merci d'avance pour vos idées

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    rechercher du coté du mot clef "BETWEEN", et sinon avec de simple opérateur du type "<=" et ">="

  3. #3
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci de votre réponse,
    Cependant, Je n'ai aucune table permettant de me donnée ce type d'information.


    Donc à quoi ressemblerai ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT date
    FROM ????
    WHERE date >= '2011-03-01'
    AND date <= '2011-03-04'

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par David55 Voir le message
    Cependant, Je n'ai aucune table permettant de me donnée ce type d'information.
    ...Hé bien il ne reste plus qu'a la créer, et la peupler...

    Je ne sais pas ce que vous comptez faire de ce résultats par la suite, mais je suppose que vous allez faire des jointures dessus...
    Le mieux est donc de créer une table de calendrier, qui contient tous les jours sur une période suffisamment longue pour couvrir la durée de vie de votre application.(ou éventuellement, en fonction de votre besoin que cette table soit peuplée automatiquement).

  5. #5
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci de votre réponse!

    Apparemment, Je suis donc obligé de créer une nouvelle table ce que je voulais éviter

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par David55 Voir le message
    Merci de votre réponse!

    Apparemment, Je suis donc obligé de créer une nouvelle table ce que je voulais éviter
    Donnez nous un peu plus d'info sur le contexte(but de tout ça,...), on pourra peut etre trouver une autre solution...
    Mais cela semble être la meilleure solution, surtout qu'il me semble (à confirmer) que MySql ne prend en charge ni les fonctions table, ni les requêtes récursives, ce qui pourrait être des alternatives, mais la, les solutions risquent d’être du "bricolage"

    pourquoi voulez vous éviter de créer une nouvelle table ?

  7. #7
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Je ne veux pas créer un nouvelle table car je n'ai pas accès au création.

    De plus, le but est simplement que je vais joindre cette requête à une autre afin d'obtenir toutes les dates d'une période et le résultat associé.

    Exemple: afficher le nombre de commande d'une date:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Jour            Commandes
    2011-03-01    2
    2011-03-02
    2011-03-03    3
    2011-03-04    1
    Bien sure à coté j'ai une table commande avec comme champs:
    id, date et element_id (element commandé)


    Remarque le 2011-03-02 il n'y a aucune commande

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    est-ce que le but est de présenter un rapport sur un mois
    date debut => 1er du mois
    date de fin => denier jour du mois
    ???

    ou au moins, y a-t-il une limite en nombre de jours entre la date de debut et la date de fin ?

  9. #9
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Oui en faite c'est sur une semaine

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par David55 Voir le message
    Oui en faite c'est sur une semaine
    Alors il y a bien une solution de contournement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT D.dte, COUNT(*)
    FROM (
    	SELECT @dateDebut AS dte UNION ALL
    	SELECT DATE_ADD(@dateDebut, INTERVAL 1 DAY) UNION ALL
    	SELECT DATE_ADD(@dateDebut, INTERVAL 2 DAY) UNION ALL
    	SELECT DATE_ADD(@dateDebut, INTERVAL 3 DAY) UNION ALL
    	SELECT DATE_ADD(@dateDebut, INTERVAL 4 DAY) UNION ALL
    	SELECT DATE_ADD(@dateDebut, INTERVAL 5 DAY) UNION ALL
    	SELECT DATE_ADD(@dateDebut, INTERVAL 6 DAY) UNION ALL
    ) D
    LEFT OUTER JOIN Commande C ON C.DateCommande = D.dte
    WHERE D.dte <= @DateFin -- <=si ca peut etre moins d'une semaine...
    GROUP BY D.dte
    Bien sûr, sur un an ça pourrait marcher aussi mais...

  11. #11
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci pour cette solution cependant, il me dit qu'il y a une erreur de syntaxe au niveau de :

    Note: Je travaille avec Workbench

  12. #12
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    En faite, j'ai essayé ceci tous seul et cela ne fonctionne pas:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DATE_ADD(@dateDebut, INTERVAL 1 DAY) UNION ALL
    Il y a une erreur de syntaxe au niveau de ALL

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par David55 Voir le message
    Merci pour cette solution cependant, il me dit qu'il y a une erreur de syntaxe au niveau de :

    Note: Je travaille avec Workbench
    ajoutez AS :


  14. #14
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Déjà fait ceci ne fonctionne pas

  15. #15
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par David55 Voir le message
    En faite, j'ai essayé ceci tous seul et cela ne fonctionne pas:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DATE_ADD(@dateDebut, INTERVAL 1 DAY) UNION ALL
    Il y a une erreur de syntaxe au niveau de ALL
    ceci est normal, UNION ALL suppose qu'une autre requete suit...

    que vous donne
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DATE_ADD(@dateDebut, INTERVAL 1 DAY)

  16. #16
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DATE_ADD('2011-03-07', INTERVAL 1 DAY)
    Et ceci me donne un résultat avec un BLOB avec le bon résultat!!!


    J'aimerai faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT D.dte
    FROM (
    	SELECT '2011-03-01' AS dte UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 1 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 2 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 3 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 4 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 5 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 6 DAY) UNION ALL
    ) D
    WHERE D.dte <= '2011-03-07'

  17. #17
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    ...

    et que donne ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ADDDATE('2011-03-01', 1) AS dte

    Cela fait longtemps que je n'ai pas utilisé MySQL (et je ne m'en porte pas plus mal ) et la syntaxe est peut être a revoir...

  18. #18
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Même résultat.

    Le résultat est bon mais c'est un blob et non une date

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pour les fonctions mysql je ne peux pas aider mais
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT D.dte
    FROM (
    	SELECT '2011-03-01' AS dte UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 1 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 2 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 3 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 4 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 5 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 6 DAY) UNION ALL
    ) D
    WHERE D.dte <= '2011-03-07'
    Le dernier union all en rouge est en trop. Après union all il doit donc y avoir un select.
    Ca donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT D.dte
    FROM (
    	SELECT '2011-03-01' AS dte UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 1 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 2 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 3 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 4 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 5 DAY) UNION ALL
    	SELECT DATE_ADD('2011-03-01', INTERVAL 6 DAY) 
    ) D
    WHERE D.dte <= '2011-03-07'
    En revanche pour les cast de date avec ajout de période sous mysql, je suis incompétente.
    A+
    Soazig

  20. #20
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    [...] Le dernier union all en rouge est en trop. Après union all il doit donc y avoir un select.
    tout à fait... Merci soazig pour la remarque, je suis allé un peu vite dans mon copier/coller


    Pareil pour moi, les fonctions MySQL... Sur le coup, je me suis contenté de jeter un oeil rapide à la doc
    Par contre je suis quand même un peu surpris qu'une fonction date retourne un BLOB...

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

Discussions similaires

  1. Récupérer les jours d'une période dans une requête
    Par akli_agha dans le forum Firebird
    Réponses: 1
    Dernier message: 24/06/2014, 08h09
  2. Récupérer les jours d'une semaine
    Par leara500 dans le forum Struts 2
    Réponses: 3
    Dernier message: 17/11/2013, 14h38
  3. Lister tous les jours d'une période donnée
    Par Fendal dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/08/2008, 21h23
  4. Réponses: 4
    Dernier message: 01/10/2006, 15h37
  5. Réponses: 5
    Dernier message: 07/09/2006, 14h41

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