Between et résultat incompréhensible !

cdie Messages postés 31 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 12 février 2012 - 12 févr. 2012 à 23:23
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 13 févr. 2012 à 14:50
Bonjour à tous,
Je me casse actuellement la tête sur une requête et je n'arrive pas à comprendre les résultats. J'ai deux tables : une table location et une table emplacement. LA table location contient une date_debut et une date_fin.
J'aimerais retourner les emplacements qui ne sont pas loués pour une période donnée. je passe par PHP pour passer les paramètres.
DAns ma table, j'ai les emplacement 1, 2 et 3 qui sont loués du 18/01/2012 au 29/01/2012, et le 4, 5 qui ne sont pas loué et n'ont aucune occurence dans la table location.

Voici ma requête test
SELECT e.em_id, e.em_libelle FROM emplacement e 
left join location l on e.em_id = l.em_id WHERE
      to_date('19/01/2012','dd/mm/yyyy') NOT BETWEEN to_date(l.lo_date_arrivee,'dd/mm/yyyy') AND to_date(l.lo_date_depart,'dd/mm/yyyy')  
      AND
      to_date('21/01/2012','dd/mm/yyyy') NOT BETWEEN to_date(l.lo_date_arrivee,'dd/mm/yyyy') AND to_date(l.lo_date_depart,'dd/mm/yyyy') 
      AND em_fonctionnel='y'


Le problème, c'est que cette requête me renvoie les 3 premiers emplacements qui sont loués ... ?
De plus, j'ignore comment faire au cas où les deux dates sont en dehors des bornes, donc par exemple, 17/01/2012 au 30/01/2012...
J'ai pensé au PL/SQL mais je ne vois pas comment faire pour retourner ces emplacements...

Si quelqu'un a déjà été confronté à cela ou a une idée, j'en serai reconnaissant !

Merci d'avance


 

1 réponse

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
13 févr. 2012 à 14:50
Oyoy,

je ne me suis pas encore penché sur ton besoin. Juste une petite remarque dans un premier temps : tes champs lo_date_arrivee et lo_date_depart ne sont-ils pas au format Date ? Si oui alors il ne faut pas utiliser la fonction de cast TO_DATE().

Si j'ai quelques minutes dans l'après-m' je regarde ton souci de plus près ;)

bon SQL
0
Rejoignez-nous