oracle返回工作日的函数,oracle计算一个日期加上指定工作日(排除周六周日和一系列节假日)时间...

第一步:

创建一个表格holiday用于灵活存放节假日日期(周末除外),如果和周末日期重复,则无需添加到该表格中:

create table T_RENT_HOLIDAY (

ID VARCHAR2(45) not null,

HL_DATE DATE,

HL_DESC VARCHAR2(500),

REMARK VARCHAR2(500),

constraint PK_HOLIDAY primary key (ID)

);

comment on table T_RENT_HOLIDAY is

‘节假日日期表(不含周末)’;

comment on column T_RENT_HOLIDAY.ID is

‘节假日编号’;

comment on column T_RENT_HOLIDAY.HL_DATE is

‘节假日期’;

comment on column T_RENT_HOLIDAY.HL_DESC is

‘假日说明’;

comment on column T_RENT_HOLIDAY.REMARK is

‘备注’;

第二步:写个函数用以获取两个日期之间的周末天数,如下:

create or replace function func_rent_weekend_count(startdate date,enddate date)

return number

/*返回两个时间段内的周末天数,开始日期不计算在内/

is

weekend_num number:=0;

tempdate date;

begin

tempdate:=startdate+1;

while tempdate<=enddate loop

weekend_num:=weekend_num+(case when to_char(tempdate,’day’) in(‘星期六’,’星期日’) then 1 else 0 end);

tempdate:=tempdate+1;

end loop;

return weekend_num;

end;

第三步:编写函数用以获取指定日期延迟特定工作日以后的具体日期,如下:

create or replace function func_rent_getDeferDate(startdate date,deferDay number)

return date

/*返回延期后的日期/

is

enddate date :=startdate+deferDay;–延期后的日期

holiday_num number:=0;–节假日天数

weekend_num number:=0;–周末天数

nonework_num number :=0;–非工作日天数

begin

–获取周末天数

weekend_num:=weekend_count(startdate,enddate);

–获取节假日天数

select nvl(count(1),0) into holiday_num from T_RENT_HOLIDAY a where a.hl_date is not null and a.hl_date > startdate and a.hl_date <= enddate;

nonework_num:=weekend_num+holiday_num;

if nonework_num !=0 then

enddate :=getDeferDate(enddate,nonework_num);

end if;

return enddate;

end;

第四步:实际应用,如下:

select func_rent_getDeferDate(sysdate-1,5) deferdate from dual;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值