计算一个日期出现在两个日期之间的次数。 SQL

Count the number of times a date appears between 2 dates. SQL

我有 2 个存储在数据库中的各种项目的日期 (dd-mm-yyyy):

ItemID|Date Arrived|Date Left
1     |01-02-1985  |01-06-2000
2     |01-02-1985  |01-04-2000

这些项目应该在每年的同一天进行测试,假设是 5 月 4 日。

我的预期输出应该是:

Item|NumInspections
1   |16
2   |15

项目 2 检查较少的原因是它在 5 月的检查日期之前于 4 月 1 日离开。

SQL 中有一种方法可以生成一个整数,显示 5 月 4 日在这两个日期之间出现的次数吗?

如果我使用 DateDiff,项目 1 的出现次数就会减少一次,因为有 15 年 4 个月,这意味着我错过了一次出现。

如果我让它总是四舍五入,那么对于项目 2,我会得到一个额外的,因为它是 15 年,2 个月,这将四舍五入为 16。那是不正确的,因为第二个日期在检查日期之前。

有什么帮助吗?

我相信这个逻辑可以满足您的需求:

select (year(d2) - year(d1) +
        (case when d1 > datefromparts(year(d1), 5, 4) and d2 < datefromparts(year(d2), 5, 4) then -1
              when d1 <= datefromparts(year(d1), 5, 4) and d2 >= datefromparts(year(d2), 5, 4) then 1
              else 0
         end)
        ) as num_days
from (values (convert(date, '01-02-1985'),  convert(date, '01-06-2000'))) v(d1, d2);

这个想法是,如果整整一年过去了,那么日期出现一次。 case 然后处理 "extremes" -- 当两个年份都有 5 月 4 日或两个年份都没有时。