Sql 选择new dateStart和new DateEnd不相交的所有行。神谕

Sql 选择new dateStart和new DateEnd不相交的所有行。神谕,sql,oracle,date,Sql,Oracle,Date,我有几张桌子 id date_start date_end 0 05.01.2017 09.01.2017 ... 我需要选择“获取我的新日期开始处和新日期结束处的所有行” 如果 我需要得到这些行,如果 new date_start = 22.12.2016 and new date_end 31.12.2016 or new date_start = 15.01.2017 and new date_end 22.01.2017 我不需要选择这些行 我创建了se

我有几张桌子

id   date_start     date_end
0    05.01.2017     09.01.2017
...
我需要选择“获取我的新日期开始处和新日期结束处的所有行”

如果

我需要得到这些行,如果

new date_start = 22.12.2016 and new date_end  31.12.2016
or new date_start = 15.01.2017 and new date_end 22.01.2017
我不需要选择这些行

我创建了select,但它不起作用

select *
  from SOME_TABLE t
 where (to_date('02.04.2017', 'dd.MM.yyyy') >= t.date_start AND
       to_date('02.04.2017', 'dd.MM.yyyy') <= t.date_end)
    OR to_date('11.04.2017', 'dd.MM.yyyy') > t.date_start
选择*
从某张桌子上
其中(截止日期('2017年4月2日,'yyyy年月日')>=t.date\u开始和
截止日期(“2017年4月2日”、“yyyy年月日”)t日期开始
如果日期不相交,则选择返回行并不重要

编辑此答案:

如果开始和结束日期可能不符合顺序,即,如果可能 那个startA>endA或者startB>endB,那么你也必须检查一下 它们是有序的,因此这意味着您必须再添加两个 有效性规则:(StartA两个日期范围,如果一个开始于另一个结束(
start1
)之前,它也在另一个开始(
end1>start2
)之后结束。因此,这将获得不与表中其他行对应的行:

SELECT *
FROM   some_table t
WHERE  NOT EXISTS (
  SELECT 1
  FROM   some_table x
  WHERE  x.start_date < t.end_date
  AND    x.end_date   > t.start_date
)
要获得相交范围,请执行以下操作:

SELECT *
FROM   some_table
WHERE  end_date   <= :your_start_date
OR     start_date >= :your_end_date
SELECT *
FROM   some_table
WHERE  end_date   > :your_start_date
AND    start_date < :your_end_date
它的可能重复部分不称为“交叉点”,而称为“重叠”。
SELECT *
FROM   some_table
WHERE  end_date   > :your_start_date
AND    start_date < :your_end_date
SELECT *
FROM   some_table t
WHERE  NOT EXISTS (
  SELECT 1
  FROM   some_table x
  WHERE  LEAST( x.start_date, x.end_date )    < GREATEST( t.start_date, t.end_date )
  AND    GREATEST( x.start_date, x.end_date ) > LEAST( t.start_date, t.end_date )
)