首页 > 解决方案 > 如何在 SQL 中获得确切的年份差异

问题描述

我需要一种简单的方法来查找两个日期之间的确切年份差异。例如 01.11.2013 和 30.10.2019 之间。在这种情况下,应该是 5 年,因为当前日期还没有到 01.11。但如果它在 29.10.2013 和 30.10.2019 之间,那么它应该是 6 年。

假设这些是生日和当前日期。这是相似的。

我尝试使用以下代码获得结果:

select datediff(year,20131101,20191030)

它给了我 6 而不是 5。我找到的最接近的解决方案是:

select datediff(day,20131101,20191030)/365

但正如我们所知,在此期间可能会有 1 或 2 个闰年,结果又不是我所期望的。当我们除以 365 和 366 时都不会。

没有必要使用 datediff。我想知道是否有一些简单的方法来呈现它或一些存储的功能来做到这一点,我不知道现有的。

标签: sqlsybase

解决方案


您可以取年差,然后在必要时减去 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

推荐阅读