mysql存储过程工作日判断_Oracle存储过程根据指定日期返回(N个)工作日的时间...

一直都没写过Oracle的存储过程,今天突然来了一个需求:计算指定日期的前N个工作日或者后N个工作日日期(去除周末,法定节假日无

一直都没写过Oracle的存储过程,,今天突然来了一个需求:计算指定日期的前N个工作日或者后N个工作日日期(去除周末,法定节假日无法计算),然后研究了一下 Oracle的时间函数和循环方法。具体实现方法如下,也没啥难的,对数据库没研究过,也不知道下面的写法效率怎么样。

或者有没有更好的写法。o(︶︿︶)o 唉!

create or replace procedure proc_CalculationWorkDate

(

plan_date in date,--登录日期

flag in number,--1 往前日期,0往后日期

date_number in number,--天数

out_date out date--计算出的日期

)

is

dayOfWeek number:=0;--星期的数字

dates number:=date_number;--往前或者往后的天数(包含工作日的)初始化给他等于天数

i int:=0;

j int:=0;

begin

if flag=1 then--计算往前日期

while i SELECT to_number(to_char(sysdate+i+j,'D')) into dayOfWeek FROM DUAL;--返回星期代表的数值

if dayOfWeek=1 or dayOfWeek=7 then --周六 周日

dates:=dates+1;

i:=i;

j:=j+1;

else

i:=i+1;

end if;

end loop;

select plan_date+dates into out_date from dual;

--DBMS_OUTPUT.PUT_LINE(dates);

end if;

if flag=0 then --计算往后日期

while i SELECT to_number(to_char(sysdate-i-j,'D')) into dayOfWeek FROM DUAL;

if dayOfWeek=1 or dayOfWeek=7 then

dates:=dates+1;

i:=i;

j:=j+1;

else

i:=i+1;

end if;

end loop;

select plan_date-dates into out_date from dual;

--DBMS_OUTPUT.PUT_LINE(dates);

end if;

end;

本文永久更新链接地址:

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值