Sql 如何在当前日期和当前日期+2之间提取数据,但不包括周末?
我有一个每天运行的报告,它显示了到期的订单,但在sysdate和sysdate+2之间。唯一的问题是因为我们周末不工作,所以从来没有任何SAT/SUN的记录 当报表在星期五运行以获取今天和星期一到期的订单时,将忽略星期一,因为sysdate+2包括周末。所以今天只退回订单 我已经做到了这一点,但它仍然没有完全忽略SAT/SUN,但只有在它确实存在的情况下才会排除它 有什么想法吗Sql 如何在当前日期和当前日期+2之间提取数据,但不包括周末?,sql,oracle,date,datestamp,Sql,Oracle,Date,Datestamp,我有一个每天运行的报告,它显示了到期的订单,但在sysdate和sysdate+2之间。唯一的问题是因为我们周末不工作,所以从来没有任何SAT/SUN的记录 当报表在星期五运行以获取今天和星期一到期的订单时,将忽略星期一,因为sysdate+2包括周末。所以今天只退回订单 我已经做到了这一点,但它仍然没有完全忽略SAT/SUN,但只有在它确实存在的情况下才会排除它 有什么想法吗 SELECT order_header.ship_by_date FROM order_header WHERE
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
如果今天是星期五,则添加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'))))
到了星期五,“天”又回到了星期五。看,实际上,它在这里返回PETAK:。本来应该是不应该的;谢谢你,艾布拉。修正了。由于某些原因,它只返回当前日期。即使我输入10或2,它也只返回当前日期?我认为如果是星期五,你需要加上4天。@Tejash Hi,我也尝试了同样的结果。这很奇怪,因为从逻辑上讲它应该能工作。