SQL当前和未来日期

时间:2014-09-01 18:32:21

标签: sql date

我有一个事件表,并找到了一个解决方案,用于选择所有当前事件和即将发生的事件(在接下来的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

非常感谢您的智慧! 非常感谢

2 个答案:

答案 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。