我有一个事件表,并找到了一个解决方案,用于选择所有当前事件和即将发生的事件(在接下来的14天内)。
我只是想知道是否有比在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
非常感谢您的智慧! 非常感谢
答案 0 :(得分:2)
假设eventStartDate <= eventFinishDate
,您可以说它必须在2周之后开始,并在今天之后结束:
where eventStartDate <= dateadd(week, 2, getdate())
and getdate() <= eventFinishDate
答案 1 :(得分: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。