计算2个时间之间的工作日天数 是否假日表t_sys_holiday 节假日可以自己配置

以下为ORACLE存储过程实现

create or replace function func_getWorldNum(in_date date,--开始时间
                                             end_date date, --结束时间
                                             d_type varchar2 --日期类型G工作日,Z自然日
                                             ) return integer IS
  /************************************************************
   计算2个时间之间的工作日天数
    是否假日表t_sys_holiday
    节假日可以自己配置
  ************************************************************/
  Result      integer;

  d_num int;

begin
  --工作日
  if d_type = 'G' then
    select count(1) into d_num
  from (select to_date(t.year || '-' || t.month || '-' || t.day,
                       'yyyy-mm-dd') atime,
               t.type
          from T_SYS_HOLIDAY t) a
 where a.atime >= in_date-1 and a.atime <= decode(end_date,null,sysdate,end_date)
   and a.type = 0;

  end if;
  --自然日
  if d_type = 'Z' then
   select count(1) into d_num
  from (select to_date(t.year || '-' || t.month || '-' || t.day,
                       'yyyy-mm-dd') atime,
               t.type
          from T_SYS_HOLIDAY t) a
 where a.atime >= in_date-1 and a.atime <=decode(end_date,null,sysdate,end_date);
   --and a.type = 1
  end if;


 Result:=d_num;
  return(Result);
end func_getWorldNum;


 

 

 

---------------------------------------

t_sys_holiday表数据生成

 

select Datetime,week,isholiday from (

  select to_char(TO_DATE('2037-12-30','yyyy-MM-dd') - level, 'yyyy-MM-dd') Datetime ,to_char(TO_DATE('2037-12-30','yyyy-MM-dd') - level, 'd') week,
  decode(to_char(TO_DATE('2037-12-30','yyyy-MM-dd') - level, 'd'),
         2,0,
         3,0,
         4,0,
         5,0,
         6,0,
         7,1,
         1,1) isholiday

  from dual

connect by level <= trunc(TO_DATE('2037-12-30','yyyy-MM-dd') - TO_DATE('1990-01-01','yyyy-MM-dd'))

) --where DOW not in (7, 1);

---节假日管理自己配置修改HOLIDAY表的字段ishokiday为1代表是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值