首页 > 解决方案 > 检查一周的日期是否位于两个特定日期之间 SQL ORACLE

问题描述

我有两个日期,并且只想保留这两个日期之间某个星期的行。我需要运行 67 周以上的不同周,所以我想更改下面的代码以更快地运行,而不必每次都输入一周中的 7 天。

SELECT * FROM MY_DATA
WHERE  ('05-JUNE-2017' BETWEEN start_date AND end_date
OR      '06-JUNE-2017' BETWEEN start_date AND end_date
OR      '07-JUNE-2017' BETWEEN start_date AND end_date
OR      '08-JUNE-2017' BETWEEN start_date AND end_date
OR      '09-JUNE-2017' BETWEEN start_date AND end_date
OR      '10-JUNE-2017' BETWEEN start_date AND end_date
OR      '11-JUNE-2017' BETWEEN start_date AND end_date);

标签: sqloracledate

解决方案


因此,您有两个日期间隔。一个是 from input_dateto input_date + 6(注意:6,不是 7;你也数了input_date!),另一个是 from start_dateto end_date。并且您想编写一个条件,表示两个间隔重叠(具有非空交集)。

如果一个完全在另一个之前,则两个间隔不会重叠。因此,一个区间的最后一天必须严格小于另一个区间的第一天。这可以通过以下两种方式之一发生(取决于哪个间隔先出现)。条件如下所示:

input_date + 6 < start_date OR end_date < input_date

所以,这是对你想要的条件的否定。将逻辑NOT运算符应用于此;所以条件变成:

input_date + 6 >= start_date AND end_date >= input_date

推荐阅读