2014-09-01 40 views
2

我有一個事件表,並找到了一個解決方案,用於選擇所有當前事件和即將到來的事件(在未來14天內)。SQL當前和未來日期

我只是想知道是否有比在WHERE語句中使用OR更好的解決方案。 這個解決方案讓我覺得自己像一個蹩腳的程序員。

SELECT 
    eventID 
    ,eventTitle 
    ,eventStartDate 
    ,eventFinishDate 
FROM Events 
WHERE eventStartDate <= GETDATE() AND eventFinishDate >= GETDATE() 
OR eventStartDate >= GETDATE() AND DATEDIFF(DAY,GETDATE(),eventStartDate) <= 14 
ORDER BY eventStartDate 

您的智慧是非常感謝! 感謝很多

回答

1

你可能需要的東西,如:

SELECT 
    eventID 
    ,eventTitle 
    ,eventStartDate 
    ,eventFinishDate 
FROM Events 
WHERE GETDATE() BETWEEN eventStartDate AND eventFinishDate 
OR eventStartDate BETWEEN GETDATE() AND DATEADD(DAY, 14, GETDATE()) 
ORDER BY eventStartDate 

通過在使用OR運算符時,一定要小心使用括號準確指定您需要的內容。您的代碼示例可能因此失敗。如果你得到錯誤的結果,你應該嘗試:

SELECT 
    eventID 
    ,eventTitle 
    ,eventStartDate 
    ,eventFinishDate 
FROM Events 
WHERE (eventStartDate <= GETDATE() AND eventFinishDate >= GETDATE()) 
OR (eventStartDate >= GETDATE() AND DATEDIFF(DAY,GETDATE(),eventStartDate) <= 14) 
ORDER BY eventStartDate 

在我的代碼,這是不需要的,因爲它不是一個複雜的表達式,但只是一個OR。

+0

謝謝呂克。你的解決方案比我的更清潔,所以我打算使用它。效果很好。還要感謝關於括號的建議 - 是有道理的。 – user1505054 2014-09-01 19:04:25

+0

不客氣! – Luc 2014-09-01 19:58:22

2

假設eventStartDate <= eventFinishDate,你可以只說它從現在開始前2周開始,今天之後結束:

where eventStartDate <= dateadd(week, 2, getdate()) 
     and getdate() <= eventFinishDate 
+0

讓我玩這個想法 - 謝謝 – user1505054 2014-09-01 18:39:27