一尘不染

SQL DateDifference在where子句中

sql

我在做如下查询:

SELECT
  *
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;

而不工作

我正在尝试获取不超过3天的数据。

SQL服务器。

这该怎么做?

DATEDIFF工作太慢。


阅读 204

收藏
2021-03-17

共1个答案

一尘不染

DateDiff速度非常快…您的问题是您正在数据库表的列值上运行它,因此即使该列上有索引,查询处理器也必须在表的每一行上运行该函数。这意味着它必须从磁盘加载整个表。

相反,请使用dateAdd今天的功能,并将数据库表列与该单次计算的结果进行比较。现在,它仅运行DateAdd()一次,并且可以使用索引(如果存在)来仅加载与谓词条件匹配的行。

Where a.DateValue > DateAdd(day,-3,getdate())

这样,您的查询谓词就可以使用SARG

2021-03-17