问题:表trans_proc处理过程,其中receivetime表示接收任务时间,finishtime表示完成任务时间
要计算处理该任务的工作日天数
初步的想法是用函数实现,先计算两个时间点之间的天数,再循环计算统计两个时间点之间非周末的天数?
请教各位大侠,有没有更好的办法,谢谢

解决方案 »

  1.   

    我来发一个
    CREATE OR REPLACE FUNCTION TEST_FOR_WEEK
    (date1 date,date2 date)
    Return number
    IS
    Day_count number;
    begin
    select count(*) into Day_count
       from ( select rownum-1 rnum
           from all_objects
           where rownum <= date2 - date1+1
          )
       where to_char(date1+rnum-1, 'D' )
            not in ( '6', '1' ) and substr(to_char(date1+rnum-1,'yyyymmdd'),5) not in         ('1001','1002','1003','0501','0405') 
            ;return Day_count;
    end TEST_FOR_WEEK;
    就是可能要再后面手动写上一年要扣掉的法定假日,再就是可能法定假日是周末的时候可能会有误差,需要改进
      

  2.   

    再发一个
    CREATE OR REPLACE FUNCTION TEST_WEEK_DAY( fromdate in date,todate in date,festival in varchar2 )
    return  number
    is 
    DayCount    number:=0;
    temp_date   date;
    dayflag     varchar2(10);
    fesflag     number;CURSOR ALL_DATE IS 
    SELECT LEVEL + fromdate
      FROM dual
    CONNECT BY LEVEL < todate-fromdate;begin
     open all_date;
     loop
     fetch all_date into temp_date ;
     Exit
     when all_date%notfound;
     select count(*) into fesflag from dual where to_char(temp_date,'mmdd') in (festival);
     if(fesflag=0)then
           select to_char(temp_date,'D')into dayflag from dual;
             if(dayflag!=1 and dayflag!=7)then
                DayCount:=DayCount+1;
             end if;
     end if;
     
     end loop; 
     return DayCount;
    end ;