Ir para o conteúdo principal

Procedure - Retorna data futura ao informar número de dias úteis

SQL: 

CREATE OR ALTER PROCEDURE RETORNA_SOMA_DIAS_UTEIS (XINICIO VARCHAR(20), XNDIA INTEGER)
RETURNS (RETORNO VARCHAR(20))
AS
declare variable i integer;
DECLARE variable DATA date;
BEGIN
i = 0;
XINICIO = replace(XINICIO,'/','.');
XINICIO = replace(XINICIO,'-','.');
DATA = CAST(XINICIO AS DATE);
WHILE (i < XNDIA) DO
  BEGIN  
  DATA = DATA +1;    
    IF (EXTRACT(WEEKDAY FROM DATA) NOT IN (0,6)) THEN  i = i + 1;       
  END
  RETORNO = DATA;
  suspend;
 END

Parâmetros da procedure:

Entrada:

  • XINICIO(varchar(20)) = Data inicial para cálculo dos dias. Exemplo: '28/11/2019'
  • XNDIA (integer) = Numero de dias uteis a serem incrementados na data. Exemplo: 2

***OBSERVAÇÕES: Existe um tratamento para aceite da XINICIO com separadores ponto, traço ou barra. A função não está preparada para considerar feriados.

Saída

  • RETORNO = Data incrementada do numero de dias uteis informados.

Chamada da procedure: 

SELECT RETORNO
  FROM DOX_RETORNA_DATA_DIAUTIL('28.11.2019', 2)

Retorno: 

2019-12-02

Explicação do retorno:

Ao informar uma data (Exemplo '28.11'2019') a função irá somar o numero de dias uteis informados, ou seja, irá desconsiderar os sábados e domingos para definição da data futura.

Detalhamento do resultado:

  • 28.11.2019 - Data inicial - Sempre será desconsiderada, faremos o incremento sempre a partir do próximo dia.
  • 29.11.2019 - Houve o primeiro incremento, ou seja, considera-se o primeiro dia útil - Sexta-feira
  • 30.11.2019 - Data ignorada - Não houve incremento - Sábado
  • 01.12.2019 - Data ignorada - Não houve incremento - Domingo
  • 02.12.2019 - Houve o segundo incremento, ou seja, considera-se o segundo dia útil - Segunda-feira
  • - Como informamos XNDIA como 2, o retorno será 2019-12-02 - 2 dias úteis após a XINICIO

Outro exemplo de uso:

SELECT RETORNO
  FROM DOX_RETORNA_DATA_DIAUTIL(current_date, 15)