我正在使用使用YEAR和MONTH间隔的DATEDIFF函数运行以下查询,但是相应地修改了查询的右侧,以便我认为它们应该相同。 dbo.logs
具有 2486512 行。
SELECT count(*) FROM dbo.logs
WHERE DATEDIFF(YEAR, DT, GetDate()) <= 1;
result: 595712
SELECT count(*) FROM dbo.logs
WHERE DATEDIFF(MONTH, DT, GetDate()) <= 12;
result: 334773
为什么我得到的结果截然不同?我认为指定12个月将返回与1年相同的行数。
答案 0 :(得分:1)
DATEDIFF()
并没有达到您的期望。它计算两个日期/时间之间的边界的数量。因此,以下两个年份的年差为“ 1”:
2018-12-31 and 2019-01-01
2018-01-01 and 2019-12-31
月份差异介于1到23之间。
更好的方法是使用日期算术:
WHERE DT <= DATEADD(YEAR, -1, GETDATE())
这不仅更准确,而且还可以利用索引。
答案 1 :(得分:0)
仅给出年份差异
SELECT DATEDIFF(YEAR,'2017-02-02', GetDate())
Result-2
它仅给出月差。
SELECT DATEDIFF(MONTH,'2019-02-02', GetDate())
结果5