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
Rangel
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qua, 02 Mai 2007 3:24 pm
Localização: Rio de Janeiro

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

Cordialmente,
Diego.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

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.

Selecionar tudo

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.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes