我需要计算两个日期之间的年差异。
尝试使用DATEDIFF,但只执行较少的日期,例如:
Date 1: 07/03/2011
Date 2: 07/02/2012
(Date format MM/DD/YYYY)
然后:DATEDIFF([yyyy],'07 / 03/2011','07/02/2012')= 1
但真正的差异是0年。
答案 0 :(得分:2)
这应该有效
declare @date1 datetime
declare @date2 datetime
select @date1 = '20110703', @date2 = '20120703'
select case
when dateadd(yy, DATEDIFF(yy, @date1, @date2), @date1) > @date2
then DATEDIFF(yy, @date1, @date2) -1
else DATEDIFF(yy, @date1, @date2) end
显示许多边缘条件的更全面的测试用例
create table dates(id int identity, date1 datetime, date2 datetime)
insert dates select '20110703', '20120703'
insert dates select '20110703', '20120702'
insert dates select '20110702', '20120703'
insert dates select '20110228', '20120228'
insert dates select '20120229', '20130228'
insert dates select '20120229', '20130301'
insert dates select '20110301', '20120229'
insert dates select '20120229', '20160301'
insert dates select '20120229', '20160229'
insert dates select '20101231', '20110101'
insert dates select '20100101', '20111231'
select date1, date2,
case
when dateadd(yy, DATEDIFF(yy, date1, date2), date1) > date2
then DATEDIFF(yy, date1, date2) -1
else DATEDIFF(yy, date1, date2) end
from dates
order by id
答案 1 :(得分:1)
如果指定[yyyy]
,SQL Server只会进行一年差异。
对于DATEDIFF([yyyy], '07/03/2011', '12/31/2011')
,它将返回零。
对于DATEDIFF([yyyy], '07/03/2011', '01/01/2012')
,它将返回1.
在您的情况下,如果您要寻找365天或366天,则应计算天数:
DATEDIFF([dd], '07/03/2011', '07/02/2012') / 366
答案 2 :(得分:1)
由于没有人有正确的解决方案,即使没有人注意到,我也会发布我的。
declare @d1 datetime
declare @d2 datetime
set @d1 = '1968-02-29'
set @d2 = '2011-02-28'
select datediff(year, @d1, @d2)-
case when month(@d1)*32 + day(@d1) > month(@d2) * 32 + day(@d2) then 1 else 0 end
--case when month(@d2)*32 + day(@d1) > month(@d2) * 32 + day(@d2) then 1 else 0 end
这个方法与下一个方法基本相同,区别在于它是用数字来完成的,以避免转换,我被告知速度较慢。
select datediff(year, @d1, @d2)-
case when convert(char(5),@d1, 1) > convert(char(5),@d2, 1) then 1 else 0 end
答案 3 :(得分:0)
在回顾了问题并回答了一些问题后,我所提供的只是一些联系:http://msdn.microsoft.com/en-us/library/ms189794.aspx。
答案 4 :(得分:0)
是的,DATEDIFF
以这种方式对所有日期部分起作用,所以我猜你应该计算天数的差异,然后除以365(如果你不关心一天中的时间,这就是这个)。 Si,试试这个:
DECLARE @StartDate DATETIME, @EndDate DATETIME
SET @StarDate= '20110307'
SET @EndDate = '20120207'
SELECT DATEDIFF(DAY,@StartDate, @EndDate)/365