使用DATEADD(),但仅当年份不是9999时

时间:2016-01-20 12:42:45

标签: sql-server

我正在尝试按以下方式执行SQL查询:

SELECT * 
FROM MyTable
WHERE GETDATE() AS CurrentDateTime < DATEADD(day, 1, EndDateTime)

问题是某些EndDateTime的日期最晚,当我尝试运行此查询时,出现错误:Adding a value to a 'datetime' column caused an overflow.

如果日期为9999年,我知道如何使用EndDateTime本身而不是EndDateTime + 1天?

2 个答案:

答案 0 :(得分:7)

按其他顺序执行逻辑:

@SpringBean

这也更好,因为查询可以利用第一个键为SELECT * FROM MyTable WHERE EndDateTime > DATEADD(day, -1, GETDATE() ); 的索引。

答案 1 :(得分:0)

使用case

SELECT *
FROM MyTable 
WHERE GETDATE() AS CurrentDateTime < case 
      when year(EndDateTime) <> 9999 
      then DATEADD(day, 1, EndDateTime) 
      else EndDateTime 
end