我有一个Events表,并找到了用于选择所有当前事件和即将发生的事件的解决方案(在接下来的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非常感谢您的智慧!非常感谢
发布于 2014-09-01 18:46:04
你可能需要这样的东西:
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。
发布于 2014-09-01 18:36:21
假设eventStartDate <= eventFinishDate,您只需说它必须在2周后开始,并且在今天之后结束:
where eventStartDate <= dateadd(week, 2, getdate())
and getdate() <= eventFinishDatehttps://stackoverflow.com/questions/25611296
复制相似问题