Ir para o conteúdo principal

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