where子句中的SQL DateDifference

Dar*_*der 12 sql sql-server datetime projection

我正在进行如下查询:

SELECT
  *
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
Run Code Online (Sandbox Code Playgroud)

并没有工作

我试图获取不超过3天的数据.

SQL服务器.

这该怎么做?

DATEDIFF工作太慢..

Cha*_*ana 28

DateDiff非常快......你的问题是你在数据库表列值上运行它,所以查询处理器必须在表中的每一行上运行该函数,即使该列上有索引也是如此.这意味着它必须从磁盘加载整个表.

而是dateAdd在今天的日期使用该函数,并将数据库表列与该单个计算的结果进行比较.现在它只运行DateAdd()一次,并且它可以使用索引(如果存在),仅加载与谓词标准匹配的行.

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

以这种方式执行此操作会使您的查询谓词具有SARG功能