sql - 检查一周的日期是否位于两个特定日期之间 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);
解决方案
因此,您有两个日期间隔。一个是 from input_date
to input_date + 6
(注意:6,不是 7;你也数了input_date
!),另一个是 from start_date
to end_date
。并且您想编写一个条件,表示两个间隔重叠(具有非空交集)。
如果一个完全在另一个之前,则两个间隔不会重叠。因此,一个区间的最后一天必须严格小于另一个区间的第一天。这可以通过以下两种方式之一发生(取决于哪个间隔先出现)。条件如下所示:
input_date + 6 < start_date OR end_date < input_date
所以,这是对你想要的条件的否定。将逻辑NOT
运算符应用于此;所以条件变成:
input_date + 6 >= start_date AND end_date >= input_date
推荐阅读
- colors - TradingView Strategy Tester - 我可以更改图表上进入/退出箭头的颜色吗
- php - 使用 PHP/Laravel 以 Word 或 PDF 格式打开 HTML
- flutter - Listview builder不更新列表中的值
- java - 在不停止 UI 线程的情况下向 android 中的循环添加延迟
- php - 如何让 PayPal 与 Laravel PHP 一起使用?
- javascript - 为什么整数键的“映射”操作比 JavaScript (v8) 中的“对象”慢得多?
- javascript - 从 node.js 调用 python sql 函数或做出反应
- c++ - 为什么使用 malloc() free(ptr) 后输出会发生变化?我认为输出将是 NULL,因为我已经释放了内存,但它显示了一些数字
- sql - Oracle LIKE operator with DECODE
- angular - ng-prime 数据表有 2 列作为数据键?