kum*_*uml 3 sql t-sql sql-server performance ssms
目前,我正在尝试以两种不同的方式运行我的 sql 查询。
WHERE order_date_time >= DateAdd(month,-3,getdate())
和
WHERE DATEDIFF(month,order_date_time,GetDate()) <= 3
1)为什么我得到两个不同的结果?我是否应该获得与尝试查找过去 3 个月或更短时间的记录相同的值?
我在 where 子句中是否没有正确计算 3 个月的差异?
2)哪个函数在性能方面更好并且返回结果更快?
DATEDIFF
计算 2 个日期时间之间的“刻度”数。因此,例如DATEDIFF(MONTH,'2019-01-31T23:59:59','2019-02-01T00:00:00')
return 1
,即使只过去了 1 秒;月份已更改(因此发生了一个“勾号”)。
对于什么是“更好”的观点,这取决于您的要求,但是,WHERE DATEDIFF(MONTH,order_date_time,GETDATE()) <= 3
这里不建议这样做,因为它是不可SARGable的。这是因为order_date_time
包含在函数内DATEDIFF
。
我会使用WHERE order_date_time >= DATEADD(MONTH,-3,GETDATE())
(假设您想要过去order_date_time
3 个月内的行)。
归档时间: |
|
查看次数: |
2550 次 |
最近记录: |