Função - Retorna quantidade de dias úteis
SQL:
create or replace function dias_uteis (vdatai in date, vdataf in date) return varchar2 as
total_dias number;
total_feriados number;
total_dias_uteis number := 0;
begin
if vdatai is not null then
/* conta a quantidade de dias entre as datas sem verificar feriados, sábados e domingos */
for cur_row in (select to_date(vdataf)-to_date(vdatai) ttdias from dual) loop
total_dias:=cur_row.ttdias;
end loop;
/* percorre dia por dia sempre checando se deseja contar ou não sabado e domingo*/
for i in 0 .. total_dias loop
for cur_row in (select (case when to_char(to_date(vdatai)+i,'D') not in(1,7) then 1 else 0 end) tt from dual) loop
total_dias_uteis:=total_dias_uteis+cur_row.tt;
end loop;
end loop;
total_dias:=total_dias+1;
else
total_dias_uteis := null;
end if;
return total_dias_uteis;
end;
Chamada da função:
select dias_uteis(to_date('01/07/2019', 'DD/MM/YYYY'), sysdate) from dual
Retorno:
13