UPDATE:這個代碼不包括DST。
您也可以建立自己的代碼,它將計算日期之間的差異並將其放入函數中。
DECLARE @dateFrom DATETIME, @dateTo DATETIME
SET @dateFrom = '2000-12-31 23:59'
SET @dateTo = '2002-01-02 00:01'
SELECT DATEDIFF(YEAR, DATEADD(year,DATEDIFF(year,0,DATEADD(year,1,@dateFrom)),0), DATEADD(year,DATEDIFF(year,0,@dateTo),0))
+ CASE WHEN YEAR(@dateFrom) < YEAR(@dateTo) THEN (DATEDIFF(MINUTE, @dateFrom, CAST(YEAR(@dateFrom) AS CHAR(4))+'-12-31 23:59') + 1)/(1.0*DATEDIFF(minute, CAST(YEAR(@dateFrom) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateFrom) AS CHAR(4))+'-12-31 23:59') + 1)
+ (DATEDIFF(MINUTE, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00',@dateTo) + 1)/(1.0*DATEDIFF(minute, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateTo) AS CHAR(4))+'-12-31 23:59') + 1)
ELSE (DATEDIFF(MINUTE,@dateFrom, @dateTo) + 1)/(1.0*DATEDIFF(minute, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateTo) AS CHAR(4))+'-12-31 23:59') + 1) END
--Result: 1.002745428591627
此代碼需要的意見,所以:
+1
需要獲得日期之間的分鐘確切數字。
這是用來計算一年有多少分鐘。
(1.0*DATEDIFF(minute, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateTo) AS CHAR(4))+'-12-31 23:59') + 1)
這給了我們今年的開始。
DATEADD(year,DATEDIFF(year,0,@dateTo),0)
這一段代碼計算@dateFrom
和@dateTo
之間的全年。
DATEDIFF(YEAR, DATEADD(year,DATEDIFF(year,0,DATEADD(year,1,@dateFrom)),0), DATEADD(year,DATEDIFF(year,0,@dateTo),0))
這是計算「偏」年。我們正在計算還剩多少分鐘到年底。
(DATEDIFF(MINUTE, @dateFrom, CAST(YEAR(@dateFrom) AS CHAR(4))+'-12-31 23:59') + 1)/(1.0*DATEDIFF(minute, CAST(YEAR(@dateFrom) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateFrom) AS CHAR(4))+'-12-31 23:59') + 1)
與我們以上所述相似,但是對於@dateTo
也有類似之處。
(DATEDIFF(MINUTE, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00',@dateTo) + 1)/(1.0*DATEDIFF(minute, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateTo) AS CHAR(4))+'-12-31 23:59') + 1)
在這裏,我們計算年的時候@dateFrom
和@dateTo
具有相同的年份部分。
(DATEDIFF(MINUTE,@dateFrom, @dateTo) + 1)/(1.0*DATEDIFF(minute, CAST(YEAR(@dateTo) AS CHAR(4))+'-01-01 00:00', CAST(YEAR(@dateTo) AS CHAR(4))+'-12-31 23:59') + 1)
難道你看這個問題的答案[鏈接](https://stackoverflow.com/questions/23145404/calculate-exact-date-difference-in-years-using-sql)?有一些方法。 – Rokuto
「但也因爲一年365天不總是」。 2017-03-29和2017-03-30之間的(小數)年數大於2000-03-29和2000-03-30之間在模型中的差異,因爲後者是閏年,並且是從而稍微長一點?您是否真的想把所有歷年的準確長度考慮在內?因爲這不是一個漂亮的計算。大多數人只需要365.25天的Julian年就可以完成。 –
就.NET背景而言 - 兩個日期之間的區別是TimeSpan,並且沒有TotalYears屬性。目前還不清楚你打算如何獲得0.997和1.005的值。 –