CREATE OR REPLACE FUNCTION f_WorkDay(
dt_begin date, --计算的开始日期
dt_end date --计算的结束日期
) RETURN int
AS
v_workday int;
v_bz int;
v_begin date;
v_end date;
BEGIN
IF dt_begin > dt_end then
v_bz:=1;
v_end:=dt_begin;
v_begin:=dt_end;
ELSE
v_bz:=0;
v_begin :=dt_begin;
v_end :=dt_end;
end if;
v_workday:=0;
WHILE v_begin <= v_end
loop
if to_char(v_begin,'d') >1 and to_char(v_begin,'d') < 7 then
v_workday :=v_workday + 1;
v_begin := v_begin +1;
else
v_begin:= v_begin+1;
end if;
end loop;
RETURN (CASE WHEN v_bz=1 THEN -v_workday ELSE v_workday END);
END;
select f_workday(to_date('20070519','yyyymmdd'),to_date('20070521','yyyymmdd')) from dual