问题:表trans_proc处理过程,其中receivetime表示接收任务时间,finishtime表示完成任务时间
要计算处理该任务的工作日天数
初步的想法是用函数实现,先计算两个时间点之间的天数,再循环计算统计两个时间点之间非周末的天数?
请教各位大侠,有没有更好的办法,谢谢
要计算处理该任务的工作日天数
初步的想法是用函数实现,先计算两个时间点之间的天数,再循环计算统计两个时间点之间非周末的天数?
请教各位大侠,有没有更好的办法,谢谢
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;
就是可能要再后面手动写上一年要扣掉的法定假日,再就是可能法定假日是周末的时候可能会有误差,需要改进
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 ;