我正在执行以下查询:
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
无法正常工作
我正在尝试获取不超过3天的数据。
SQL服务器。
如何做到这一点?
DATEDIFF速度太慢了。
我正在执行以下查询:
SELECT
*
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
无法正常工作
我正在尝试获取不超过3天的数据。
SQL服务器。
如何做到这一点?
DATEDIFF速度太慢了。
DateDiff
非常快... 你的问题在于你正在运行它在数据库表列值上,因此查询处理器必须在表中的每一行上运行该函数,即使该列上已经有索引。这意味着它必须从磁盘加载整个表。
相反,使用 dateAdd
函数在今天的日期上进行计算,并将数据库表列与该单个计算的结果进行比较。现在它只运行 DateAdd()
一次,并且可以使用索引(如果存在),以仅加载与谓词条件匹配的行。
Where a.DateValue > DateAdd(day,-3,getdate())
用这种方式做可以使你的查询谓词成为可搜索的
微软的文档http://msdn.microsoft.com/en-us/library/aa258269%28v=sql.80%29.aspx建议您使用getdate()
代替DateTimeNow
。这样做有什么更好的效果吗?
您的查询似乎还不错。另一种解决方法是:
SELECT * FROM a WHERE a.DateValue > DATEADD(dd,-3,GETDATE())
Where
语句内部执行DateAdd
函数和在外部将其赋值给变量,这样做是否有影响? - mbomb007