[SQL] Intervalle de dates

Jean-Guy Badiane Messages postés 646 Date d'inscription   Statut Membre Dernière intervention   -  
Jean-Guy Badiane Messages postés 646 Date d'inscription   Statut Membre Dernière intervention   -
Youpi ! Bonjour à vous toutes et à vous tous.
Vous allez bien, Vesooooooooul ? Faisez du bruit, Limoooooooooges !

C'est encore Jean-Guy qui vient vous ennuyer avec un problème lié au SQL.
Comme d'habitude, un porte-clés en granit et douze caniches abricot sont à la clé.

J'ai créé une nouvelle table "dates_livraison" contenant cinq champs.

dates_livraison (id_voiture, annee, mois, jour, garage)

J'y ai inséré une centaine de n-uplets, avec le même identifiant de voiture, pour les mois de juin, juillet et août. Dans mon code en PHP, je souhaiterais récupérer le(s) garage(s) où a/ont été livré(s) cette voiture, entre le 14 juin et le 20 juillet.

SELECT garage FROM 'dates_livraison' WHERE (jour BETWEEN '14' AND '20') AND (mois BETWEEN '6' AND '7') AND (annee BETWEEN '2010' AND '2010') AND id_voiture='1';


Avec BETWEEN, j'obtiens les n-uplets du 14 juin au 20 juin, puis du 14 juillet au 20 juillet. Ce n'est vraiment pas terrible, n'est-ce pas ? ha ha.


Auriez-vous une solution ? Merci d'avance.

Jean-Guy Badiane, kinésithérapeute pour chariots usagés.


A voir également:

4 réponses

Profil bloqué
 
Faudrait convertir tes valeurs au format date

Essaye un truc du genre :
SELECT garage FROM 'dates_livraison' WHERE ( (ISDATE('jour/mois/annee') AS "DD/MM/YYYY") BETWEEN '14/06/2010' AND '20/07/2010') AND id_voiture='1';
1
fiu
 
salut

Faster than PsyTron, la soluce SQL standard est de concaténer année avec mois et jour (en s'assurant que les 0 initiaux sont présents) et le tour est joué !
si t'es pas sûr d'avoir des 0 initiaux, il faut un décalage décimal

select garage from dates_livraisons where annee||mois||jour between '20100614' and '20100720' and ...

avec les décalages:
select garage from dates_livraisons where annee*10000+mois*100+jour between 20100614 and 20100720 and ...


idéalement, il faut stocker des dates dans les bases, pas autre chose. reste ensuite à apprendre à les manipuler, c'est l'histoire d'un petit quart d'heure.
0
Jean-Guy Badiane Messages postés 646 Date d'inscription   Statut Membre Dernière intervention   7
 
Merci beaucoup, c'est exactement ce qu'il me fallait.

Retrouvez-moi dans votre supermarché, je vous fournirai les cadeaux susnommés, ainsi que quelques bons de réduction sur le rayon Fromages.

A bientôt sur CCM.
Le saumon, ça voyage mal dans le mocassin.
0
Jean-Guy Badiane Messages postés 646 Date d'inscription   Statut Membre Dernière intervention   7
 
Hello à toutes et à tous. Jean-Guy, en tongs et paréo.

Votre aide m'a été TRÈS précieuse, et je vous en remercie.
Auriez-vous la gentillesse de répondre à une dernière question ?

En fait, cela concerne cette requête...
select garage from dates_livraisons where annee*10000+mois*100+jour between 20100614 and 20100720 and ...  


J'ai rajouté dans ma table une colonne "TEST". Elle a pour valeur O ou N.
dates_livraison (id_voiture, annee, mois, jour, garage, test)

Ce que je souhaiterais, c'est vérifier si les n-uplets (entre le 14 juin et le 20 juillet 2010) ont tous la valeur TEST égale à O. Savez-vous comment procéder ? Merci d'avance.

Jean-Guy Badiane, disponible en taille Medium et Small.
0
Jean-Guy Badiane Messages postés 646 Date d'inscription   Statut Membre Dernière intervention   7
 
arg. après huit heures de recherche, je n'ai toujours rien trouvé...

Je remonte le message.
0