Ahanna_B 0 Denunciar post Postado Junho 25, 2013 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
Motta 645 Denunciar post Postado Junho 26, 2013 Creio já ter visto uma fuction para isto para mysql aqui no fórum. http://forum.imasters.com.br/topic/154688-calcular-diferena-de-datas-em-dias-uteis/ https://www.google.com.br/search?q=mysql+function+dias+%C3%BAteis&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a Compartilhar este post Link para o post Compartilhar em outros sites
Ahanna_B 0 Denunciar post Postado Julho 1, 2013 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