如何計算兩個日期相差m年n月,本文利用DATEDIFF函數實作上述需求,以提供可能的解法。
剛在論壇上看到有人提問要計算兩個日期相差m年n月,方法應該很多種,筆者想到的利用DATEDIFF來計算相差m年以及n月,程式碼如下:
1: declare @d1 datetime = '20110902'
2: , @d2 datetime = '20121205'
3: , @yeardif int = 0
4: , @monthdif int =0
5:
6: set @yeardif = DATEPART(YEAR,@d2)-DATEPART(YEAR,@d1)
7: set @monthdif = DATEPART(MONTH,@d2)-DATEPART(MONTH,@d1)
8:
9: select @d1 as d1,@d2 as d2,@yeardif as y,@monthdif as m
10:
11: --取得兩個日期相差的年和月
12: select (case when @yeardif > 0 and @monthdif < 0
13: then @yeardif -1 else @yeardif end) as '年'
14: ,(case when @yeardif >0 and @monthdif < 0 then 12 + @monthdif
15: else @monthdif end) as '月'
16:
17: --驗證
18: select dateadd(month
19: ,(case when @yeardif >0 and @monthdif < 0 then 12 + @monthdif
20: else @monthdif end)
21: ,(dateadd(year
22: ,(case when @yeardif > 0 and @monthdif < 0 then @yeardif -1 else @yeardif end)
23: ,@d1))
24: )
25:
上述程式碼的第6、7列用來取得兩個日期相差的年(m)和相差的月(n)。接著利用第12-13列來計算,當m大於0而且n小於0時,代表兩個日期相差不滿m年,因此兩個日期相差m-1年,否則兩個日期相差m年。當m大於0且n小於0時,代表兩個第二個日期的月份比第一個日期的月份來的小,因此兩個日期相差12+n月,否則兩個日期相差n月。
所以可以得到下列的結果: