Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ahanna_B

Function para somar dias úteis a uma data

Recommended Posts

Olá,

 

Utilizo uma função (não criada por mim) em VBA que recebe duas variáveis (data e prazo) e apresenta a data futura, considerando o prazo como dias úteis. Preciso criar essa mesma função para o MySql, mas não estou conseguindo. Abaixo, o código VBA, que funciona perfeitamente, e em seguida a minha tentativa frustrada de criar a mesma função no MySql. Agradeço se puderem me auxiliar.

Function ADU(data, prazo) 'adicionando dias uteis'===> CONSIDERANDO FERIADOS NACIONAISDim adicionado, adicionar As IntegerDim feriado As DateDim DATAI As DateDim DATAF As DateDim x As IntegerIf IsNull(DATAI) Then    ADU = NullElse    DATAI = data 'no formato mm,dd,yyyy    adicionar = prazo    adicionado = 1    DATAF = DATAI    Do While (adicionado <= adicionar)        DATAF = DATAF + 1        x = Weekday(DATAF)        If (Weekday(DATAF) = 1 Or Weekday(DATAF) = 7) Or EhFeriado(DATAF) = True Then  '1=domingo ou 7=sábado OU FERIADO    '   If (Weekday(DATAF) = 1 Or Weekday(DATAF) = 7) Then  '1=domingo ou 7=sábado            adicionado = adicionado        Else            adicionado = adicionado + 1        End If    Loop    ADU = DATAFEnd IfEnd Function

BEGIN#DECLARE adicionado int;#DECLARE adicionar int;#DECLARE feriado Date;#DECLARE DATAI Date;#DECLARE DATAF Date;#DECLARE x Int;#if @DATAI is null then#    set @dataFim = null;#else #		set @DATAI = data1;    set @adicionar = prazo;    set @adicionado = 1;#    set @DATAF = @DATAI;		set @DATAF = data1;    while (@adicionado <= @adicionar) do         set @DATAF = ADDDATE(@DATAF,1);#        set @x = Weekday(@DATAF);				if (Weekday(@DATAF) In (5,6)) or f_verifica_dia_util(@l_ret = -1) then        #if (Weekday(@DATAF) = 5 or Weekday(@DATAF) = 6) then              set @adicionado = @adicionado;        else            set @adicionado = (@adicionado + 1);        end If;		end while;    #end If;SET @dataFim = @DATAF;RETURN @dataFim;END

 

 

 

 

Eu preciso criar uma function para o MySql, que receba uma data e um prazo, e verifique em uma tabela os feriados, desconsidere sábados e domingos e me mostre a data futura (conforme o prazo em dias úteis). Melhorou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui chegar à função que verifica os dias úteis e também já estou com a função que determina se o dia é ou não feriado. Mas ainda não consigo chamar uma dentro da outra, para pular sábados, domingos (já está ok) e feriados (ainda falta). Abaixo as duas funções.

Quando eu incluo a função "Feriado", não tenho o retorno esperado (minha tentativa segue abaixo).

Qualquer ajuda é bem-vinda! :yes:

 

Essa é minha tentativa que não retorna nada...

BEGIN

DECLARE adicionado int;
DECLARE adicionar int;
DECLARE dataInicio date;
DECLARE dataFim date;
DECLARE resultado date;
DECLARE feriado date;
DECLARE x int;
DECLARE v_feriado Int Default 1; 
DECLARE l_ret Int Default 1;   

#IF dataInicio IS NULL THEN
#	SET resultado = NULL;
#ELSE
	SET dataInicio = bobinho;
	SET adicionar = prazo;
	SET adicionado = 1;

	SET dataFim = dataInicio;

	WHILE adicionado <= adicionar DO
		SET dataFim = ADDDATE(dataFim,1);
		set x = WEEKDAY(dataFim);

		IF (x IN (5,6)) or consulta_feriados(@l_ret = -1) THEN 
			SET adicionado = (adicionado);
		ELSE
			SET adicionado = (adicionado + 1);
		END IF;
	
	END WHILE;

SET resultado = dataFim;
#END IF;

RETURN resultado;

END

 

Função para somar um prazo (dias úteis) a uma determinada data. Se a data informada cair em sábado ou domingo, ignora e passa a contagem para o dia seguinte.

BEGIN

DECLARE adicionado int;
DECLARE adicionar int;
DECLARE dataInicio date;
DECLARE dataFim date;
DECLARE resultado date;
DECLARE x int;

#IF dataInicio IS NULL THEN
#	SET resultado = NULL;
#ELSE
	SET dataInicio = bobinho;
	SET adicionar = prazo;
	SET adicionado = 1;

	SET dataFim = dataInicio;

	WHILE adicionado <= adicionar DO
		SET dataFim = ADDDATE(dataFim,1);
		set x = WEEKDAY(dataFim);

		IF (x IN (5,6)) THEN 
			SET adicionado = (adicionado);
		ELSE
			SET adicionado = (adicionado + 1);
		END IF;
	
	END WHILE;

SET resultado = dataFim;
#END IF;

RETURN resultado;

END

 

Função para verificar feriados (informação em tabela do banco de dados). Retorna -1 se a data informada for feriado:

Begin   

Declare l_ret Int Default 1;   
Declare v_feriado Int Default 1;   

If (Weekday(p_data) In (5,6)) Then   
Set l_ret = -1;   
End If;   
    
select count(*) into v_feriado 
from feriados 
where dt_feriado = p_data;   
if (v_feriado = 1) Then   
set l_ret = -1;   
end if; 
Return l_ret;
End

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.