简单查询以检测可选日期值的日期重叠

时间:2018-02-08 20:37:53

标签: sql date datetime overlap

Determine Whether Two Date Ranges Overlap非常简单。我的情况稍微困难一些,但必须有一个简单的解决方案。

我有以下表格:

    CREATE TABLE catalog_version
    (
        id character varying(36) NOT NULL,
        name character varying(255),
        valid_from timestamp without time zone,
        valid_to timestamp without time zone,
    )

    CREATE TABLE catalog_article
    (
        id character varying(36) NOT NULL,
        code character varying(100),
        catalog_version_id character varying(36),
        valid_from timestamp without time zone,
        valid_to timestamp without time zone,
    )

以下限制:

  • 目录1..1 - 0..n目录版本。
  • 目录版本1..1 - 0..n目录文章。
  • valid_from和valid_to对于BOTH版本和文章都是可选的。
  • 如果某篇文章没有date_from,那么它在版本开始时有效。
  • 如果某篇文章没有date_to,则该版本在版本到期之前有效。
  • 不能有两篇具有相同代码的文章同时有效。
  • 该框架使用查询构建器,这意味着我无法使用任何特定于数据库的功能。

有没有办法以简单的方式检测,如果用户试图定义新的目录文章,在给定时间是否已有效文章?

示例:

----------------------------------------Version A---------------------------------------I
               I--Article ABC--I
                                               I--Article ABC--I





 Valid cases:
                                I-Article ABC-I
                                                               I-Article ABC-----------------
--Article ABC--I



 Invalid cases:
-----------------------------------------Article ABC-------I
                                    I----------Article ABC-----------------------------------

有没有人知道是否有办法简化这项任务?我手边的唯一解决方案是为每种可能的情况制定AND条件。

1 个答案:

答案 0 :(得分:0)

这是我发现帮助我解决这个问题的方法。

的第二条评论
 SELECT MAX(starttime), MIN(endtime) FROM #period HAVING MIN(endtime) >
 MAX(starttime);

这个答案属于另一个问题:

Overlapping dates