2013-04-11 75 views
0

我在編寫查詢時會遇到問題,該查詢會告訴我給定的汽車是否在指定的日期內被預訂。我的表格被稱爲Bookings,並且有CarID,StartDateEndDate列。如果汽車在用戶輸入的時間段內預訂,我想返回一排。目前,我有這個疑問,這是我從網上找來一些修修補補:檢查與Access的日期範圍衝突

SELECT * 
FROM Bookings 
WHERE BookingID NOT IN 
(SELECT BookingID 
FROM Bookings 
WHERE 
    (StartDate <= user_start_date AND EndDate >= user_start_date) OR 
    (StartDate <= user_end_date AND EndDate >= user_end_date) OR 
    (StartDate >= user_start_date AND EndDate <= user_end_date)) AND 
    (CarID = 7) 

在這裏,我使用user_start_date作爲用戶我的開始日期和user_end_date從用戶的結束日期,以及汽車的7。然而,這個邏輯似乎並不奏效。即使我確認日期中絕對沒有衝突,它總是返回行。

我該如何修改這個查詢,使其工作?

感謝

回答

1

假設沒有一個日期可以爲空,並開始日期小於結束日期,下面的查詢要列出汽車7任何預訂重疊給定的日期範圍:

SELECT * 
FROM Bookings 
WHERE CarID = 7 
AND StartDate < user_end_date 
AND EndDate > user_start_date