确定日期范围重叠的长度

时间:2018-07-26 22:42:23

标签: sql sql-server-2012

我有两个日期范围的约束。其中一个永远不会改变它的测量时间(日期范围A)。我需要尝试确定第二个日期范围(日期范围B)是否与A重叠至少6个月的时间。最好的方法是什么?

我已经考虑过尝试根据两个区域的相交方式以不同的方式比较两个范围的开始日期和结束日期,但尚未找到可靠的方法。

1 个答案:

答案 0 :(得分:0)

您没有说数据库是什么,所以我在PostgreSQL中工作了一个例子:

create table a (
  since date,
  upto date
);

insert into a (since, upto) values ('2017-01-01', '2017-10-25');

create table b (
  since date,
  upto date
);

insert into b (since, upto) values ('2017-04-24', '2018-01-15');
insert into b (since, upto) values ('2017-06-01', '2018-01-15');
insert into b (since, upto) values ('2016-08-15', '2017-10-04');

select a.*, b.*
  from a, b
  where a.upto > b.since + interval '6 month' and a.since < b.since
     or b.upto > a.since + interval '6 month' and b.since < a.since

结果:

since          upto           since          upto           
------------------------------------------------------------
2017-01-01     2017-10-25     2017-04-24     2018-01-15     
2017-01-01     2017-10-25     2016-08-15     2017-10-04