sql - 如何在 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。我想知道是否有一些简单的方法来呈现它或一些存储的功能来做到这一点,我不知道现有的。
解决方案
您可以取年差,然后在必要时减去 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
推荐阅读
- authentication - Kubernetes 集群角色管理员无法获取部署状态
- unix - 如何去除 YAML 格式配置文件中的重复行?
- sublimetext3 - zsh:找不到命令:stt
- c# - ASP.NET Gridview 上的引导样式按钮组
- image - 为什么计算 RGB 的平均值不会产生像素的亮度?
- javascript - 仅从 Inspector、SVG 可见的元素
- java - JavaFX StackPane 不显示方法内部的对象
- css - 这个伪元素适用于什么?
- java - 将“无效”值“住宅”转换为数据类型 int 时转换失败
- c++ - 显式模板实例化和一个定义规则