给定以下示例查询,当还给出一组要排除的范围时,考虑到这些范围可能有重叠的日期,什么是计算日期范围内总天数的合理且高效的方法?
更简单地说,我有一个表格,其中包含一组关闭计费的日期范围,我从一个日期范围开始(比如 Jan1 - Jan31),我需要确定在该范围内发生了多少计费天。只需将日期的日期差异减去禁用日期的日期差异的总和。但是,禁用日期范围有可能重叠,即在一条记录中禁用 Jan5-Jan8,在另一条记录中禁用 Jan7-Jan10 - 因此简单的总和会使 Jan7 加倍。排除这些重叠并获得准确计数的最佳方法是什么。
Declare @disableranges table (disableFrom datetime, disableTo datetime)
insert into @disableranges
select '01/05/2013', '01/08/2013' union
select '01/07/2013', '01/10/2013' union
select '01/15/2013', '01/20/2013'
declare @fromDate datetime = '01/01/2013'
declare @toDate datetime = '01/31/2013'
declare @totalDays int = DATEDIFF(day,@fromDate,@toDate)
declare @disabledDays int = (0 /*not sure best way to calc this*/)
select @totalDays - @disabledDays