[SQL] Intervalle de dates

Fermé
Jean-Guy Badiane Messages postés 646 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 31 mars 2020 - 7 juin 2010 à 16:19
Jean-Guy Badiane Messages postés 646 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 31 mars 2020 - 13 août 2010 à 19:44
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.


4 réponses

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
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 mardi 3 mars 2009 Statut Membre Dernière intervention 31 mars 2020 7
Modifié par Jean-Guy Badiane le 13/06/2010 à 12:27
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 mardi 3 mars 2009 Statut Membre Dernière intervention 31 mars 2020 7
13 août 2010 à 11:30
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 mardi 3 mars 2009 Statut Membre Dernière intervention 31 mars 2020 7
13 août 2010 à 19:44
arg. après huit heures de recherche, je n'ai toujours rien trouvé...

Je remonte le message.
0