請參見附件圖像找到兩者之間的日期範圍
alt text http://img248.imageshack.us/img248/7743/datefrom.png
我有有沒有fromdate和todate表中的記錄。 FromDate是某個事件的開始,ToDate是該事件的結束。如果搜索條件在日期範圍之間,我需要查找記錄。
例如
如果一條記錄有FromDate 2010/15/5和ToDate 2010/15/25,我的標準是FromDate 2010/5/18,ToDate是2010/5/21,那麼這條記錄應該在搜索結果中,因爲這是在15至25
以下的範圍內是我的搜索查詢(大塊)
SELECT m.EventId
FROM MajorEvents
WHERE ( (m.LocationID = @locationID OR @locationID IS NULL) OR M.LocationID IS NULL)
AND (
CONVERT(VARCHAR(10),M.EventDateFrom,23) BETWEEN CONVERT(VARCHAR(10),@DateTimeFrom,23) AND CONVERT(VARCHAR(10),@DateTimeTo,23)
OR
CONVERT(VARCHAR(10),M.EventDateTo,23) BETWEEN CONVERT(VARCHAR(10),@DateTimeFrom,23) AND CONVERT(VARCHAR(10),@DateTimeTo,23)
)
如果搜索標準等於沒有fromdate或TODATE那麼結果是確定如如果搜索criterai是DateFrom = 2010/5/15 AND DateTo = 2010/5/18那麼這條記錄將返回因爲Date From就是從數據庫中的DateFrom。
OR
如果搜索條件是DateFrom = 2010年5月22日和DateTo = 2010年5月25日則此記錄將返回,因爲終止日期是究竟什麼是DateTo在DB
但是如果有的在此範圍之間它不起作用
感謝您的幫助。
編輯:
我不能使用< =或>,因爲這會帶來所有其他記錄這比搜索條件的日期是小於大。
我只想獲取這些日期的記錄 E.g. FromDate = 2010/5/15和DateTo = 2010/5/25這是日期範圍,但事件在所有日期之間,因此一種解決方案是將2010年5月15日至2010年5月25日的所有日期分開存儲表,但如果我可以使用查詢做到這一點?
你也可以告訴我,這是不可能的。
這工作,但你能告訴我什麼原因使用DATEADD和DATEDIFF函數0,因爲0會對日期沒有影響。謝謝您的幫助。 – Kashif 2010-06-11 14:01:20
我發現你發佈的圖片中有日期與他們相關的時間。 DATEADD和DATEDIFF功能如圖所示使用時,將所有日期的時間值設置爲午夜。實際上,它將時間消除爲一個因素。或者,您可以將@天添加到@DateTimeTo並將比較結果更改爲<。如果您不隨時間採取這種預防措施,您可能會因爲時間值大於午夜而丟棄記錄。我希望我解釋得很清楚。這只是SQLMenace發佈的鏈接中討論的問題的另一種解決方案。 – NYSystemsAnalyst 2010-06-11 15:48:38
謝謝,很好的幫助。 – Kashif 2010-06-11 18:46:16