none
DIAS UTEIS - FUNÇÃO RRS feed

  • Pergunta

  • Pessoal bom dia

    Eu estou precisando fazer um update em um campo de uma tabela de data, que faça o seguinte:

    Atualize o campo baseado em um outro campo de data, com 30 dias uteis, mas tenho uma função que ja faz os dias uteis.

    Exemplo:


    update tblWRITitulos Set DtDevolucaoLimite = (dbo.fn_DiaUtil) + (tblWRIRecepcao.DtRecep + 30)
    from tblWRITitulos
    inner join tblWRIRecepcao on tblWRIRecepcao.PK_Recepcao = tblWRITitulos.FK_tblWRIRecepcaoRecepcao
    where tblWRITitulos.FK_tblWRIRecepcaoRecepcao = 562135

    O numero 30 é a quantidade de dias, 

    Bom eu nao consegui fazer isso, pois o comando acima esta errado, como eu poderia fazer?

    Obrigado

    sexta-feira, 7 de agosto de 2015 12:17

Respostas

  • Boa tarde,

    Considerando que existem 2 parâmetros de entrada na sua função, respectivamente a data e a quantidade de dias, e que o retorno seja uma data, experimente mais ou menos dessa forma:

    Set DtDevolucaoLimite = dbo.fn_DiaUtil(tblWRIRecepcao.DtRecep, 30)

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quarta-feira, 12 de agosto de 2015 20:43
    terça-feira, 11 de agosto de 2015 17:17

Todas as Respostas

  • Bom dia LFernando,

    Não sei se pode ajudar, mas eu tenho uma função que adiciona dias uteis a uma data, mas a minha função, só conta os sábados e domingos. Se precisar contar os feriados, aconselho a você a criar uma tabela contendo as datas dos feriados e alterar a função para ignorar essas datas.

    Segue a função e o uso.

    ALTER FUNCTION addDiasUteis (@data DATE, @diasUteis INT) RETURNS DATE
    AS
    BEGIN
    	DECLARE @diasCorridos INT = 0;
    	DECLARE @i INT = 0
    
    	WHILE (@i < @diasUteis)
    	BEGIN
    		SET @diasCorridos = @diasCorridos + 1
    		IF (DATEPART(WEEKDAY, DATEADD(DAY, @diasCorridos, @data)) NOT IN (1,7))
    			SET @i = @i + 1
    	END
    
    	RETURN  DATEADD(DAY, @diasCorridos, GETDATE())
    END
    GO
    
    
    SELECT dbo.addDiasUteis(GETDATE(), 6) --ADICIONA 6 DIAS UTEIS AO DIA DE HOJE

    Espero ter ajudado.

    sexta-feira, 7 de agosto de 2015 12:53
  • Entao, a minha funçao ja conta os feriados, eu so precisava fazer o update mesmo

    sexta-feira, 7 de agosto de 2015 13:14
  • Qual é o problema do update.

    Atualiza errado?, dá alguma mensagem de erro?

    sexta-feira, 7 de agosto de 2015 13:34
  • update tblWRITitulos Set DtDevolucaoLimite = (dbo.fn_DiaUtil) + (tblWRIRecepcao.DtRecep + 30)
    from tblWRITitulos
    inner join tblWRIRecepcao on tblWRIRecepcao.PK_Recepcao = tblWRITitulos.FK_tblWRIRecepcaoRecepcao
    where tblWRITitulos.FK_tblWRIRecepcaoRecepcao = 562135

    Msg 4104, Level 16, State 1, Line 1
    The multi-part identifier "dbo.fn_DiaUtil" could not be bound.

    • Editado lfernando34 sexta-feira, 7 de agosto de 2015 13:53 err
    sexta-feira, 7 de agosto de 2015 13:51
  • Esse erro acontece quando você tenta utilizar um campo que não existe, ou o retorno da sua função não pôde ser utilizado.

    Como é a sua função, porque aparentemente, seu update está correto


    sexta-feira, 7 de agosto de 2015 14:27
  • Entao, por isso que postei aqui, para alguem me ajudar

    Porque eu acho que meu update esta errado

    • Editado lfernando34 sexta-feira, 7 de agosto de 2015 17:11 acres
    sexta-feira, 7 de agosto de 2015 16:54
  • Fernando,

    Tenta executar o update desta forma:

    update tblWRITitulos Set DtDevolucaoLimite = (dbo.fn_DiaUtil) + (tblWRIRecepcao.DtRecep + 30)
    from tblWRITitulos  tblWRITitulos
    inner join tblWRIRecepcao tblWRIRecepcao  on tblWRIRecepcao.PK_Recepcao = tblWRITitulos.FK_tblWRIRecepcaoRecepcao
    where tblWRITitulos.FK_tblWRIRecepcaoRecepcao = 562135



    Fernando Fonseca

    sexta-feira, 7 de agosto de 2015 17:28
  • Olá Fernando,

    Deu o mesmo erro, infelizmente

    sexta-feira, 7 de agosto de 2015 17:33
  • Boa tarde,

    Considerando que existem 2 parâmetros de entrada na sua função, respectivamente a data e a quantidade de dias, e que o retorno seja uma data, experimente mais ou menos dessa forma:

    Set DtDevolucaoLimite = dbo.fn_DiaUtil(tblWRIRecepcao.DtRecep, 30)

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quarta-feira, 12 de agosto de 2015 20:43
    terça-feira, 11 de agosto de 2015 17:17
  • Boa tarde,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 12 de agosto de 2015 20:43