如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?

Posted

技术标签:

【中文标题】如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?【英文标题】:How do i pull data between current date and current date + 2 but exclude weekends? 【发布时间】:2020-05-17 00:27:10 【问题描述】:

我有一份每天运行的报告,它显示到期订单,但介于 sysdate 和 sysdate +2 之间。唯一的问题是我们周末不工作,SAT/SUN 从来没有任何记录。

当报表在周五运行以提取今天和周一到期的订单时,周一将被忽略,因为 sysdate + 2 包括周末。所以它只返回今天的订单。

我已经做到了这一点,但它仍然没有完全忽略 SAT/SUN,但只有在它确实存在时才会排除它。

有什么想法吗?

SELECT order_header.ship_by_date 
FROM order_header 
WHERE (order_header.ship_by_date >= TRUNC(sysdate) AND order_header.ship_by_date < TRUNC(SYSDATE) + 2 
    AND 
       (order_header.ship_by_date IN (SELECT order_header.ship_by_date 
        FROM ORDER_HEADER 
        WHERE TO_CHAR(order_header.ship_by_date, 'DAY') NOT IN ('SAT','SUN'))))

下面是我运行的查询:

 FROM order_header
WHERE     order_header.ship_by_date >= TRUNC (SYSDATE)
       AND order_header.ship_by_date <
                TRUNC (SYSDATE)
              + CASE WHEN TO_CHAR (SYSDATE, 'DY') = 'FRIDAY' THEN 4 ELSE 2 END```

Results returned:

   SHIP_BY_DATE
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000
31-JAN-20 00.00.00.000000000

如果我运行此查询,我会得到星期一的结果,但它没有帮助,因为它包括 SAT/SUN。您可以看到它是如何在 1 月 31 日和 2 月 3 日返回的。

  FROM order_header
 WHERE order_header.ship_by_date >= TRUNC (SYSDATE)
        AND order_header.ship_by_date <
                 TRUNC (SYSDATE) +4

SHIP_BY_DATE
31-JAN-20 10.14.00.000000000
31-JAN-20 10.17.00.000000000
31-JAN-20 11.09.00.000000000
31-JAN-20 11.20.00.000000000
03-FEB-20 00.00.00.000000000
03-FEB-20 00.00.00.000000000

【问题讨论】:

【参考方案1】:

如果今天是星期五,添加 4 天而不是 2:

SELECT order_header.ship_by_date
  FROM order_header
 WHERE (    order_header.ship_by_date >= TRUNC (SYSDATE)
        AND order_header.ship_by_date <
                 TRUNC (SYSDATE)
               + CASE WHEN TO_CHAR (SYSDATE, 'DY') = 'FRI' THEN 4 ELSE 2 END     --> this
        AND (order_header.ship_by_date IN (SELECT order_header.ship_by_date
                                             FROM ORDER_HEADER
                                            WHERE TO_CHAR (
                                                     order_header.ship_by_date,
                                                     'DY') NOT IN ('SAT', 'SUN'))))

【讨论】:

TO_CHAR(SYSDATE,'DAY') 返回星期五。见dbfiddle 实际上,它在这里返回 PETAK :)。应该是DY;谢谢你,@Abra。固定。 由于某种原因它只返回当前日期。即使我放了 10 else 2,它也只返回当前日期? 如果是星期五,我认为您需要添加 4 天。 @Tejash 嗨,我也试过了,结果也一样。这很奇怪,从逻辑上讲它应该起作用。

以上是关于如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?的主要内容,如果未能解决你的问题,请参考以下文章

我如何能够当前日期输出文件名数据提取 Arcgis Flex

JAVA关于得到当前日期两年后的日期

mysql: 如何计算指定日期到当前日期之间的天数

如何在沃森对话中提取当前日期

Mysql如何按照日期对比数据

行不为空然后转到下一行以根据列中的当前日期粘贴数据