Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2011, 12h10   #1
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
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
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 12h40   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

rechercher du coté du mot clef "BETWEEN", et sinon avec de simple opérateur du type "<=" et ">="
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 13h49   #3
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
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 :
1
2
3
4
5
 
SELECT date
FROM ????
WHERE date >= '2011-03-01'
AND date <= '2011-03-04'
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 14h13   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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).
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 15h41   #5
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Merci de votre réponse!

Apparemment, Je suis donc obligé de créer une nouvelle table ce que je voulais éviter
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h32   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 16h52   #7
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
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 :
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
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h25   #8
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h26   #9
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Oui en faite c'est sur une semaine
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h32   #10
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 :
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...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/02/2011, 17h44   #11
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Merci pour cette solution cependant, il me dit qu'il y a une erreur de syntaxe au niveau de :

Note: Je travaille avec Workbench
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h47   #12
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
En faite, j'ai essayé ceci tous seul et cela ne fonctionne pas:


Code :
1
2
 
SELECT DATE_ADD(@dateDebut, INTERVAL 1 DAY) UNION ALL
Il y a une erreur de syntaxe au niveau de ALL
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h48   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 :

aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h49   #14
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Déjà fait ceci ne fonctionne pas
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h50   #15
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par David55 Voir le message
En faite, j'ai essayé ceci tous seul et cela ne fonctionne pas:


Code :
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 :
1
2
 
SELECT DATE_ADD(@dateDebut, INTERVAL 1 DAY)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 17h53   #16
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
J'ai essayé :

Code :
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 :
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'
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 18h01   #17
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
...

et que donne ceci :
Code sql :
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...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 18h32   #18
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Même résultat.

Le résultat est bon mais c'est un blob et non une date
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 21h37   #19
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Pour les fonctions mysql je ne peux pas aider mais
Dans
Code :
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 :
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/03/2011, 10h21   #20
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h13.


 
 
 
 
Partenaires

Hébergement Web