【问题标题】:Determining the the Length of a Date Range Overlap确定日期范围重叠的长度
【发布时间】:2018-07-26 22:42:23
【问题描述】:

我有两个日期范围的限制。其中之一永远不会改变它是测量周期(日期范围 A)。我需要尝试查找第二个日期范围(日期范围 B)是否与 A 重叠至少 6 个月。解决此问题的最佳方法是什么?

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

【问题讨论】:

标签: sql sql-server-2012


【解决方案1】:

你没有说数据库是什么,所以我在 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     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2019-08-29
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多