我所试图做的是看是否有日期时间变量的日期随时在过去十二个月的值发生日期时间变量。如何检查是否在过去十二个月
我尝试使用DATEDIFF功能,但后来我很快就发现,这已经四舍五入问题(第31 DEC/1之间的比较JAN只能算作1个月例如,尽管只有一天了他们之间的传递)
为了使这个更准确,我可以使用-365天作为参数,而不是-12个月但是这仍然给出了不考虑闰年的问题(不是一个常见的场景,但仍然一个我最好避免!)
任何想法,我如何能够最好地去呢?
我所试图做的是看是否有日期时间变量的日期随时在过去十二个月的值发生日期时间变量。如何检查是否在过去十二个月
我尝试使用DATEDIFF功能,但后来我很快就发现,这已经四舍五入问题(第31 DEC/1之间的比较JAN只能算作1个月例如,尽管只有一天了他们之间的传递)
为了使这个更准确,我可以使用-365天作为参数,而不是-12个月但是这仍然给出了不考虑闰年的问题(不是一个常见的场景,但仍然一个我最好避免!)
任何想法,我如何能够最好地去呢?
闰年的问题可以通过DATEADD(datepart,number,date)函数来解决。您可以指定从当前日期开始减去一年。
where myDate between DATEADD (year , -1 , GETDATE()) and GETDATE()
您正在使用什么日期格式
使用DATEADD而不是从今天减去一年和比较
@datetimevariable >= DATEADD(year, -1, GETDATE())
注意:您不需要比较上限(GETDATE()),除非你有在将来的日期。
另外,你想要的是一年下来到小时和分钟?如果没有,用这个它是安全的datatype precedence如果@datetimevariable
为datetime
或datetime2
,你需要这是一个WHERE子句或这样
@datetimevariable >= CAST(DATEADD(year, -1, GETDATE()) as date)
这适用于闰年
SELECT DATEADD(YEAR, -1, '20120301'), DATEADD(YEAR, -1, '20120229')
2011-03-01 00:00:00.000
2011-02-28 00:00:00.000
DATEDIFF作品在特定的边界:本月开始,今年开始,午夜等,这就是为什么在这种情况下失败
DATEDIFF计算分区数在两个日期之间,抱歉地说没有舍入问题,它确实如它在罐子上所说的那样。您最好的解决方案可能是使用DATEADD
WHERE MyVal BETWEEN GETDATE() AND DATEADD(YEAR, -1, GETDATE())
?包括小时和分钟吗? – 2013-04-23 08:45:15