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

Get difference between two dates in Years

我正在使用具有 StartDate 和 EndDate 字段的 table。我需要找出那几年之间的区别。

示例: 开始日期 = 1/1/2017 结束日期 = 12/31/2017

我希望日期差异的结果 = 1。

此外,我想将它四舍五入到最接近的整数。

示例: 开始日期 = 1/1/2017 结束日期 = 11/30/2017

我希望日期差异的结果 = 1。

使用 datediff 函数,我能够得到结果,但它没有四舍五入到最接近的整数。

示例查询: 尽管 65 个月/12 将小于 5.5,但我已经 6 年了:

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) 
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'

使用此代码,希望对您有所帮助。

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

这可能有点旧,但是在使用 Oracle SQL Developer 时,您可以使用以下内容。只需在下面添加您的日期。我正在使用日期时间。这用于获取 0 到 10 之间的年份。

TRUNC((MONTHS_BETWEEN(<DATE_ONE>, <DATE_TWO>) * 31) / 365) > 0 and TRUNC((MONTHS_BETWEEN(<DATE_ONE>, <DATE_TWO>) * 31) / 365) < 10