2017-08-30 187 views
0

我正在使用具有StartDate和EndDate字段的表。我需要找出幾年之間的差異。獲取年份中兩個日期之間的差異

示例: 的StartDate = 2017年1月1日 結束日期= 2017年12月31日

我期望的日期差值結果= 1。

另外,我想將它四捨五入到最接近的整數。

示例: 的StartDate = 2017年1月1日 結束日期= 2017年11月30日

我期望的日期差值結果= 1。

使用datediff函數,我能夠得到結果,但它不是四捨五入到最接近的整數。

例子查詢: 我聽到6年份甚至那邊在幹什麼月份/ 12將低於5.5:

select (DATEDIFF(yy, '01/01/2016', '5/31/2021') 
+ CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '05/31/2021')) > 15 THEN 1 ELSE 0 END) 
select (DATEDIFF(mm, '01/01/2016', '05/31/2021') 
+ CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '05/31/2021')) > 15 THEN 1 ELSE 0 END) 
+0

您是否嘗試過使用'ROUND'功能? – cwanjt

+0

我嘗試了一輪函數,但它保持返回0而不是1。我希望看到0,如果返回小於.5,如果超過.5返回,則返回1。我可以似乎做1. – NonProgrammer

+0

我剛剛意識到我的錯誤。我沒有正確使用循環函數:我認爲這將起作用:select round(1.3,0) – NonProgrammer

回答

0

到目前爲止,下面的查詢似乎工作正常。我的錯誤是我除以12而不是12.0,因爲四捨五入正確工作。誰知道! :

select 
Round((DATEDIFF(mm, '01/01/2016', '07/1/2017') 
    + CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '06/30/2017')) > 15 THEN 1 ELSE 0 END)/12.0, 0) 
1
DECLARE @startdate DATETIME = '1-1-2017', 
     @enddate DATETIME = '12-31-2018' 
SELECT @startdate as StartDate, @enddate as EndDate, 
DATEDIFF(YEAR, @startdate, @enddate) 
    - 
(CASE 
    WHEN DATEADD(YEAR, 
      DATEDIFF(YEAR, @startdate,@enddate), @startdate) 
     > @enddate THEN 1 
     ELSE 0 END) 'Date difference in Years' 

使用此代碼,我希望它會幫助你。

+0

問題與您的代碼是如果您使用07-01-2018作爲@enddate,它仍然會給你1年而不是2 。 – NonProgrammer