如何获得 SQL 中的确切年份差异
How to get the exact year difference in SQL
我需要一种简单的方法来找出两个日期之间的确切年份差异。
例如在 01.11.2013 和 30.10.2019 之间。在这种情况下,它应该是 5 年,因为当前日期还没有达到 01.11。但是如果是在2013年10月29日到2019年10月30日之间那么应该是6年。
假设这些是生日和当天。很像。
我尝试使用以下代码获得结果:
select datediff(year,20131101,20191030)
它给了我 6 个而不是 5 个。我找到的最接近的解决方案是:
select datediff(day,20131101,20191030)/365
但据我们所知,在此期间可能会有 1 或 2 个闰年,结果再次与我预期的不完全相同。当我们除以 365 或 366 时都不会。
没有必要使用datediff。我想知道是否有一些简单的方法来呈现它或一些我不知道的现有存储函数来执行此操作。
你可以取年差,必要时再减1:
select (datediff(year, val1, val2) -
(case when month(val1) < month(val2) then 0
when month(val1) > month(val2) then 1
when day(val1) <= day(val2) then 0
else 1
end)
) as diff_years
你可以试试 datediff Month / 12。
Declare @date1 Datetime
Declare @date2 Datetime
set @date1='2013-11-01 23:59:59'
set @date2='2019-10-30 00:00:00'
(select (datediff(HOUR, @date1, @date2)/24/365 ) as diff_years)
我需要一种简单的方法来找出两个日期之间的确切年份差异。 例如在 01.11.2013 和 30.10.2019 之间。在这种情况下,它应该是 5 年,因为当前日期还没有达到 01.11。但是如果是在2013年10月29日到2019年10月30日之间那么应该是6年。
假设这些是生日和当天。很像。
我尝试使用以下代码获得结果:
select datediff(year,20131101,20191030)
它给了我 6 个而不是 5 个。我找到的最接近的解决方案是:
select datediff(day,20131101,20191030)/365
但据我们所知,在此期间可能会有 1 或 2 个闰年,结果再次与我预期的不完全相同。当我们除以 365 或 366 时都不会。
没有必要使用datediff。我想知道是否有一些简单的方法来呈现它或一些我不知道的现有存储函数来执行此操作。
你可以取年差,必要时再减1:
select (datediff(year, val1, val2) -
(case when month(val1) < month(val2) then 0
when month(val1) > month(val2) then 1
when day(val1) <= day(val2) then 0
else 1
end)
) as diff_years
你可以试试 datediff Month / 12。
Declare @date1 Datetime
Declare @date2 Datetime
set @date1='2013-11-01 23:59:59'
set @date2='2019-10-30 00:00:00'
(select (datediff(HOUR, @date1, @date2)/24/365 ) as diff_years)