我有一些天变量,我想与datetime列(senddate)进行比较。

我目前正在这样做:

DECLARE @RunDate datetime = '2013-01-01'
DECALRE @CalculationInterval int = 10

DELETE
FROM TableA
WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval

所以基本上所有比10天还旧的东西都应该删除,我们在sendDate列上有Index,但是速度仍然慢得多,我知道左侧出于性能原因不应该进行计算,但是解决该问题的最佳方法是什么问题?

最佳答案

表达方式

WHERE datediff(dd, senddate, @RunDate) > @CalculationInterval
由于senddate列上的功能,将无法在senddate列上使用索引
为了使WHERE子句为“SARGable”(即能够使用索引),请更改为等效条件:
WHERE senddate < dateadd(dd, -@CalculationInterval, @RunDate)
[感谢@Krystian Lieber,指出错误的状态]。

10-06 10:11