Número de dias úteis dentro de um determinado período

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qua, 02 Mai 2007 3:32 pm

Olá pessoal,preciso de uma function ou procedure que calcula o número de dias úteis em um determinado período.

Cordialmente,
Diego.
Rangel
Localização: Rio de Janeiro

Mensagemem Qua, 02 Mai 2007 5:04 pm

Brother, abaixo segue um exemplo.

Nota Importante: Não computei nesta function os feriados. Para tal, você teria que ter o cadastro dos mesmos e adicionar nesta function.

Código: Selecionar todos
DECLARE
 
  V_DATA_INI DATE            := TO_DATE('01/05/2007','dd/mm/rrrr');
  V_DATA_FIM DATE            := TO_DATE('02/05/2007','dd/mm/rrrr');
  V_QT_DIAS_UTEIS NUMBER(10) := 0;
 
   FUNCTION FUN_DIAS_UTEIS (P_DATA_INICIAL IN DATE,
                            P_DATA_FINAL   IN DATE)
   RETURN NUMBER                         
   
   IS                         
   
     v_dia_semana NUMBER(10) := 0;
     v_dias_uteis NUMBER(10) := 0;
    
   BEGIN
   
     IF to_number(TO_char( P_DATA_INICIAL , 'D' )) NOT IN (1,7)
     THEN
        v_dias_uteis := 1; -- Conto a própria data inicial, se não for sábado ou domingo
     END IF;
   
     FOR x in 1..( P_DATA_FINAL - P_DATA_INICIAL )
     LOOP
   
        v_dia_Semana := to_number(TO_char( P_DATA_INICIAL + x, 'D' )) ;
        
        IF v_dia_semana NOT IN (1,7) -- 1,7 não somo sábado e domingo.
        THEN
           v_dias_uteis := v_dias_uteis + 1;
        END IF;
        
     END LOOP;
    
     RETURN v_dias_uteis ;
   EXCEPTION
     WHEN OTHERS THEN
       raise_application_error(-20001,'Erro ao selecionar dias úteis: ' || SQLERRM ); 
   END FUN_DIAS_UTEIS;

BEGIN
   V_QT_DIAS_UTEIS := FUN_DIAS_UTEIS (V_DATA_INI, V_DATA_FIM);
   dbms_output.put_line('Qtd. Dias Úteis: ' || V_QT_DIAS_UTEIS);
END;



Espero ter ajudado.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem