【问题标题】:How to check overlapping dates between multiple date ranges? [closed]如何检查多个日期范围之间的重叠日期? [关闭]
【发布时间】:2020-06-21 22:25:20
【问题描述】:

抱歉我的英语不好,但我在检查重复日期时遇到了问题。

我有一个列表日期,包括数据库中的 from_date 和 to_date,我想检查如下:

在数据库中:

from_date   | end_date 
-------------------------
2020/02/10  | 2020/02/15 
-------------------------
2020/01/20  | 2020/01/31 
-------------------------
2020/02/16  | NULL
-------------------------

输入:

input['from'] = 2020/01/15;
input['to'] = 2020/01/25;
input['from'] = 2020/01/10;
input['to'] = NULL;

NULL 表示之后的日期不受限制。

条件:

检查 input[from] 和 input[to] 是否与数据库中的另一个范围重叠。

在这种情况下:

输入无效: 因为

2020/01/15 - 2020/01/25 的日期与 2020/01/20 - 2020/01/31 的范围重叠

2020/01/10 的日期 - NULL 与 2020/02/16 的范围重叠 - NULL

有效案例:

  • 2020/02/01 - 2020/02/09
  • 2020/01/10 - 2020/01/19

【问题讨论】:

    标签: php mysql sql date


    【解决方案1】:

    您可以使用以下逻辑来获取参数有任何重叠(端点除外)的行:

    select d.*
    from dates d
    where d.from_date < @to and
          (d.to_date > @from or d.to_date is null)
    

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多