Oracle的下一个工作日(星期一至星期五)? [英] Next business day (Monday - Friday) in Oracle?

查看:215
本文介绍了Oracle的下一个工作日(星期一至星期五)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要计算Oracle中的下一个工作日(工作日为星期一-星期五).目前,在我们的报表程序中,我们使用了一个变量,该变量支持<|Tomorrow|>,但是问题在于,直到周一为止,客户直到周一都没有收到要求的详细信息,例如星期一的交货.

I need to calculate the next business day (business days being Monday - Friday) in Oracle. At the moment in our reporting program we use a variable it supports <|Tomorrow|> but the problem is that customers do not receive the require details for say a Monday's delivery until a Sunday which is pointless since no one is there.

因此,我们需要计算前一个星期五的星期一,星期一的星期一,星期二的星期三,星期四的星期三和星期四的星期五.

So we need to calculate Monday on the previous Friday, Tuesday on Monday, Wednesday on Tuesday, Thursday on Wednesday and Friday on Thursday.

直接在Oracle中执行此操作的最佳方法是什么,因为我们的报告程序似乎没有下一个工作日变量.基本上我们需要将Where ORDER_HEADER.DELIVERY_DATE = '<|Tomorrow|>'更改为Where ORDER_HEADER.DELIVERY_DATE = ** next business day **

What is the best method to do it within directly Oracle since our reporting program does not seem to have a next business day variable. Basically we need to change Where ORDER_HEADER.DELIVERY_DATE = '<|Tomorrow|>' to Where ORDER_HEADER.DELIVERY_DATE = ** next business day **

这是Oracle 10g.

This is Oracle 10g.

Select ORDER_HEADER.DELIVERY_DATE As "Delivery Date",
  ORDER_HEADER.ORDER_NO As "Document No",
  ORDER_HEADER.CUSTOMER_ORDER_NO As "Customer Order No",
  ORDER_TOTALS.ORDER_TOTAL_QUANTITY As "Total Items",
  ORDER_TOTALS.ORDER_TOTAL_NET As "Total Net"
From ORDER_HEADER
  Inner Join ORDER_TOTALS On ORDER_HEADER.ORDER_NO = ORDER_TOTALS.ORDER_NO
Where ORDER_HEADER.DELIVERY_DATE = '<|Tomorrow|>' And ORDER_HEADER.CUSTOMER_NO = :Param1
Order By "Document No"

推荐答案

如果仅查找工作日,则一种方法是创建自己的函数,该函数将在下一个工作日返回:

If you looking for only week days, then one way is create your own function which returns next business day:

create or replace function calc_date(dt date)
return date as ret date;
begin
    SELECT min(dt)  into ret from (
        SELECT ( dt + 1 ) AS dt  FROM DUAL
        UNION 
        SELECT ( dt + 2 ) AS dt  FROM DUAL
        UNION 
        SELECT ( dt + 3 ) AS dt  FROM DUAL
    ) t
    where TO_CHAR(dt, 'D') not in (1,7);
    return ret;
end;

致电

select calc_date('2017-09-08') from dual;

这篇关于Oracle的下一个工作日(星期一至星期五)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆