获取年份中两个日期之间的差异

获取年份中两个日期之间的差异

问题描述:

我正在使用具有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

到目前为止,下面的查询似乎工作正常。我的错误是我除以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) 

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