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)