2013-01-22 5 views
0

Possible en double:
Determine Whether Two Date Ranges OverlapSQL select * basé sur deux dates dans une autre table

Je suis en train de créer une requête qui sélectionne toutes les voitures dans une table selon qu'ils avoir une réservation dans la table des réservations. En ce moment j'ai ceci qui fonctionne bien jusqu'à ce que je mets une réservation de date moins un jour et une réservation deux date plus un jour. Parce que j'utilise égal, il montrera une voiture qui est réservée dans cette plage de dates.

Comment pourrais-je modifier cela, donc si j'ai une voiture dans la table des réservations avec une date du 22-jan-13 et un à ce jour du 25-jan-13 et un utilisateur entre le 20 -jan-13 et 27-jan-13 respectivement, la voiture ne sera pas visible dans les résultats.

SELECT * 
FROM vehicles, car_model, manufacture 
WHERE NOT EXISTS (SELECT * 
        FROM booking 
        WHERE vehicles.reg_number = booking.reg_number 
        AND booking.date_from = '22-JAN-13' 
        AND booking.date_to = '23-JAN-13' 
        AND booking.booking_status = 1) 
AND vehicles.model_code = car_model.model_code 
AND car_model.manufacture_code = manufacture.manufacture_code; 

Merci.

+0

ce type sont date_from et date_to? datetime ou varchar? –

+0

Le format pour eux est la date – user667430

+0

Plutôt que ce soit un problème SQL spécifique, cela ressemble plus à un problème général de déterminer quand deux plages de dates se chevauchent. Est-ce que la question Stackoverflow [http://stackoverflow.com/questions/325933/determine-whether-two-dates-ranges-overlap](http://stackoverflow.com/questions/325933/determine-whether-two-date- plages-chevauchement) aider tout? – PeteH

Répondre

0

Utilisez l'opérateur BETWEEN-SELECT ... WHERE ... BETWEEN start_date AND end_date...

Questions connexes