我希望从数据库中提取三年的数据,但是现在我必须使用between语句在我的代码中的多个部分中指定日期:
BETWEEN’2015-10-01‘和’2018-09-30’从……
在WHERE子句中,您可以使用以下条件:
DATEDIFF(month, [YourDateColumn], GETDATE()) BETWEEN 1 AND 36
不要用 between 而且工作变得容易多了。使用少于 的 本月的第一天 强> 在该日期之前(而不是上个月的最后一天)准确定位所有内容。从同一天减去3年,并使用> =作为起点。
between
Select * From yourtables where datecol >= dateadd (year,-3,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0) ) And datecol < DATEADD(mm,DATEDIFF(m,0,GETDATE()),0)
请不要使用任何使用23:59:59作为一天结束的解决方案。它不是一天的结束,现在有几种数据类型支持亚秒级时间精度。
如果你真的不能在日期函数中使用零,只需使用基准日期'1900-01-01'
SELECT DATEADD(YEAR, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), '1900-01-01')) , DATEADD(mm, DATEDIFF(m, 0, GETDATE()), '1900-01-01') ;
这也应该有效(确实如此) 在这个演示中 ):
SELECT DATEADD(YEAR, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0)) , DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0) ;