ORACLE - 如何检查从约会到约会的两个日期?

时间:2017-06-26 14:45:04

标签: sql oracle datetime sql-date-functions

我有一个表格,其中包含有关销售期间的信息,现在我需要知道某些行是否相互重叠。例如:如果有一段时间与' 01/12 / 2016'到' 31/01/2017'我想知道某些行是否重叠,例如< 15/12/2016'到' 02/02/2017'。你有什么想法吗?

 NUMBER(5)        DATE                 DATE
 Period No.       from date            to-date
-----------------------------------------
9891              01/06/2016         31/07/2016   
9892              01/08/2016         30/09/2016   
9893              01/09/2016         31/10/2016 -- This row is overlapped
9894              01/11/2016         31/12/2016
9895              15/12/2016         28/02/2017 -- This row is overlapped
9896              01/03/2017         31/05/2017

我知道在两个日期之间检查一个日期的逻辑(WHERE v_date_1 BETWEEN v_date_2 AND v_date_3)但我不知道如何检查两个日期之间的两个日期!感谢。

1 个答案:

答案 0 :(得分:4)

不确定您希望输出的格式。这是一种方法。

key(other than 3500)    count
    3501                1
    4100                3
    1234                1

我们将表连接到自身,因为我们想要比较不同的行(在同一个表中而不是在不同的表中,但概念是相同的 - 对于这样的比较,您加入表,即使它是两个副本同一张表)。这被称为“自我加入”。

然后:有两种方式,时间间隔可能不重叠:第一种方式在第二种方式开始之前结束,或第二种方式在第一种方式开始之前结束。现在NEGATE这个条件(记住“或”的否定是“和”)并且你在JOIN子句中得到了两个额外的条件。