【问题标题】:Find records which date range collides with another date range查找日期范围与另一个日期范围冲突的记录
【发布时间】:2018-07-01 00:01:40
【问题描述】:

让我们打赌用户想要找到日期范围与给定范围冲突的记录:

例如,我们有一个给定的数据集

|--- FROM --- | --- TO --- | ------ COLLIDES ------ |
| 2018-01-01  | 2018-01-05 | YES (with all 5 days)  |
| 2018-01-01  | 2018-01-01 | YES (with 1 day)       |
| 2017-12-20  | 2019-10-19 | YES (with all 5 days)  |
| 2017-12-25  | 2017-12-31 | NO                     |
| 2018-03-01  | 2018-03-20 | NO                     |

是否有有效的方法来过滤给定日期范围冲突的数据集?

【问题讨论】:

    标签: postgresql date overlap date-range


    【解决方案1】:

    完成

    select date_from, date_to, (date_from, date_to) 
    OVERLAPS(DATE '2018-01-01' - interval '1 day', DATE '2018-02-28' + interval '1 day') 
    from test
    

    【讨论】:

      【解决方案2】:

      just checking:

      t=# with c(f,t) as (values('2018-01-01'::date,'2018-01-05'::date))
      select daterange(f,t,'()') && '(2018-01-01, 2018-02-28)'::daterange from c;
       ?column?
      ----------
       t
      (1 row)
      

      and the intersection value:

      t=# with c(f,t) as (values('2018-01-01'::date,'2018-01-05'::date))
      select daterange(f,t,'()') * '(2018-01-01, 2018-02-28)'::daterange from c;
              ?column?
      -------------------------
       [2018-01-02,2018-01-05)
      (1 row)
      

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多