2014-09-01 55 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