Comment faire pour comparer deux champs dates

Fermé
Moby - 5 août 2004 à 23:07
 bayedemba - 16 juin 2010 à 19:55
Bonjour,
Je ne sais pas de requete sql qui me permete de comparer deux champs date. Par exemple un champ date debut et un champsdate fin (je decide un tarif d'une chambre d'hotel du 01/08/2004 champ 1 au 30/09/2004 champ 2 au tarif de 64 €) la requete doit me permettre de resortir le tarif de 64 € si la demande faite de du 05/08 au 09/08 alors la requete doit rechercher entre 01/08 et 30/09 pour me donner 4 * 64 €
Merci de votre aide
A voir également:

23 réponses

grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 11:56
select id_tarif
from tarif, date_debut, date_fin
where date_debut.id_date_debut = date_debut.id_date_debut
and date_fin.id_date_fin = date_fin.id_date_fin
and date_passée_en_paramètre between date_debut and date_fin

Mais cela dit, pour n'avoir qu'une date dans les deux tables date_debut et date_fin, pourquoi ne pas mettre directement les dates dans la table tarif ? Au niveau mémoire, c'est à peine plus, et pour les perfs et la différence de boutot, ça risque de faire la différence...

Michael.


Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
1
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 09:57
Salut

C'est en MySQL ?

where date between d1 and d2

Michael.

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
Attention ce sont deux champs aleatoires qui sont données par l'utilisateur pour l'instant je fais des tests avec access mais je suis sous sql server
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 10:37
Comment ça, des champs aléatoires ?
Tu veux dire que l'utilisateur peut demander une fouchette de date, de prix et/ou de n'importe quoi ?

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Une fourchette de date mais on a date 1 qui est une table date_debut et une date 2 qui une autre table date_fin.
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 11:26
Tu veux pas donner la structure de tes deux tables, parce que j'ai du mal à cerner ton problème, là !

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
Table date_debut avec les champs id_date_debut ; date_debut
Table date_fin avec les champs id_date_fin; date_fin

Table tarif avec les champs id_tarif (en auto); id_date_debut; id_date_fin; tarif; id_hotel.

Donc la table tarif comprend une date de debut une date de fin avec un tarif et un hotel. Une requete doit permettre de ressortir le tarif a partir du moment ou ce dernier et entre la date_debut et date_fin
0
c quoi ce champs date_passée_en_paramètre
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 12:12
tu donnes quoi en paramètre à ta requête ?

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
en faite tu aurais un deroulant pour les date_debut et un autre pour date_fin qui devront renseigner la requete sql
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 14:06
select id_tarif
from tarif, date_debut, date_fin
where date_debut.id_date_debut = date_debut.id_date_debut
and date_fin.id_date_fin = date_fin.id_date_fin
and date_debut.date_debut >= param1
and date_fin.date_fin <= param2

où param1 et param2 viennent de tes listes déroulantes.
C'est clair ?

Michael.

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
le probleme est:

si tu fais la requete sql ci dessus et que par exp tu as choisi date debut 01/08/2004 au 31/08/04 un tarif de 64 €. et si on lance dit moi le prix pour du 03/08 au 24/08 alors la requete ne trouve rien la requete ci dessus marche uniquement dans le cas ou tu donnes les dates de debut et de fin masi si tu fais entre alors la requete ne marche pas
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 14:45
OK, ca se précise.
Dis-moi juste, par rapport à cet exemple :
date_deb date_fin   prix
-------- --------   ------
01/08/04 31/08/04   64eur
01/09/04 30/09/04   45eur

Si tu demandes
du 5/8 au 15/8 => 64 eur
du 25/8 au 4/9 => 64 eur
du 5/9 au 25/9 => 45 eur

C'est juste ?


Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
oui c ca
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 15:51
OK, alors c'est comme ceci :
select id_tarif
from tarif, date_debut, date_fin
where tarif.id_date_debut = date_debut.id_date_debut
and tarif.id_date_fin = date_fin.id_date_fin
and date_debut.date_debut >= param1
and date_fin.date_fin <= param1

puisque la date de fin sélectionnée n'a pas d'importance !

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
ca ne fonctionne pas
0
en fait ca ne fonctionne que si on prend les dates exacts de debut et de fin des periodes entre ca ne fonctionnent pas
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
6 août 2004 à 22:15
Oh hé !
Je m'a trompé !
select id_tarif
from tarif, date_debut, date_fin
where tarif.id_date_debut = date_debut.id_date_debut
and tarif.id_date_fin = date_fin.id_date_fin
and date_debut.date_debut <= param1
and date_fin.date_fin >= param1


:-)
Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
merci ca marche
et si on complique un peu et on dit
du 01/08 au 31/08 c'est 64 €
et 01/09 au 31/10 c'est 70 € et que la date debut est 29/08 et fin 02/09 en gros la requete doit me permettre de resortir les deux tarifs
merci bcp pour ton aide
0
grofwa Messages postés 440 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 21 juillet 2006 479
7 août 2004 à 09:20
Oui, mais là, tu changes les règles du jeu :-) (voir Post No 13 et 14)
Je pense que pour faire ça, tu devras passer par de la programmation pour déterminer les fins de mois et exécuter autant de requêtes qu'il y aura de périodes différentes.

michael.

Ne vous souciez pas de n'être pas remarqué ; cherchez 
plutôt à faire quelque chose de remarquable [Confucius]
0
Mourad EL Bakkouri
7 août 2004 à 18:36
Ce que j'ai compris c'est que tu veux calculer le montant à payer entre un période limiter , mais le tarif devient 64 entre le 01/08 et le 30/09 . je dois donc calculer le nbr des jours n1 < 01/08 et n2 entre le 01/08 et le 30/09 et n3 > 30/09
Total = (n1* TarifNormal) + (n2 * 64) + (n3 * TraifNormal)
pour calculer n1 , n2 , n3
Dim D1 as Date
Dim D2 As Date
n1=0
n2=0
n3=0
if (D1 < #08/01/2004#) Then n1=DateDiff("d",D1,"01/08/2004")
if (D1 >= #08/01/2004#) And (D2 <= #09/30/2004#) Then
n2=DateDiff("d",D1,D2)
end if
if (D2 > #09/30/2004#) Then n3=DateDiff("d","30/09/2004",D2)
0