【发布时间】: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
【问题讨论】: