【发布时间】:2012-05-14 15:50:27
【问题描述】:
我在 SQL Server 2000 表中有以下数据:
Dates
-----------------------
2012-05-04 01:23:45.678
2012-05-05 01:23:45.678
2012-05-06 01:23:45.678
假设GETDATE()返回:
2012-05-05 12:34:56.789
我需要从上面返回第 2 行和第 3 行的最有效(和优雅)的查询,条件是:
Dates 的日期部分 >= GETDATE()
的日期部分
【问题讨论】:
-
@Oded:
WHERE CONVERT( VARCHAR, Dates, 101 ) >= GETDATE( ) - 1(i) 它不使用任何索引 (ii) 当GETDATE()的时间部分正好是00:00:00时,它在边缘情况下失败。 -
首先在局部变量中“缓存”
GETDATE()(或您需要的确切值 - 不包括时间部分)。 -
而您只需要将整个日期与当前日期进行比较即可获得该值。转换为 VARCHAR 会杀死索引 - 它不是 sargable。
-
@Oded:我将其转换为 varchar 以消除时间部分(这是我知道的唯一方法)。
标签: sql-server tsql datetime sql-server-2000