none
Questão referente DATEADD RRS feed

  • Pergunta

  • Help!

    Gostaria de saber o porquê que no SELECT baixo obtenho o retorno do DATEADD sendo o dia 02/03/2017. O DateAdd não considera o dia corrente? Se contarmos a data de hoje mais 30 dias será o dia 01/03/2017 e não 02/03/2017.

    SELECT   DATEADD (dd, 30, GETDATE() ) MAIS30,
           DATEADD (dd, 30, CONVERT(DATE,'20170131')) MAIS30_1

    Agradeço desde já a atenção dispensada!

    terça-feira, 31 de janeiro de 2017 16:52

Respostas

  • Olá,

    Lembre-se, DATEADD (nos casos que o incremento é maior que 0) não começa a contar no dia atual (31/01). Começa no dia 01/02, portanto como fevereiro tem apenas 28 dias, o resultado da soma de 30 dias será dia 02/03.

    OBS: O valor de incremento que é dado ao DATEADD, deve ser somado a data atual, portanto para efeitos de "prova real" inicia-se a contagem no dia seguinte (salvo se o incremento for 0, pois aí nem tem lógica contar)

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Marcado como Resposta Rafael Binda terça-feira, 31 de janeiro de 2017 17:06
    • Editado André SeccoMVP terça-feira, 31 de janeiro de 2017 22:21
    terça-feira, 31 de janeiro de 2017 17:03

Todas as Respostas

  • Olá,

    Lembre-se, DATEADD (nos casos que o incremento é maior que 0) não começa a contar no dia atual (31/01). Começa no dia 01/02, portanto como fevereiro tem apenas 28 dias, o resultado da soma de 30 dias será dia 02/03.

    OBS: O valor de incremento que é dado ao DATEADD, deve ser somado a data atual, portanto para efeitos de "prova real" inicia-se a contagem no dia seguinte (salvo se o incremento for 0, pois aí nem tem lógica contar)

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    • Marcado como Resposta Rafael Binda terça-feira, 31 de janeiro de 2017 17:06
    • Editado André SeccoMVP terça-feira, 31 de janeiro de 2017 22:21
    terça-feira, 31 de janeiro de 2017 17:03
  • Olá ,

    DATEADD funciona da seguinte forma ,  quantos dias vai ser adicionado na data

      ou seja se você quer adicionar 1 dia a partir de hoje, logo o resultado será amanha

    SELECT DATEADD (DAY,1, CONVERT(DATE,'20170131'))

    quando você adiciona 30 dias a logica é quantos dias a partir de hoje vou adicionar 

    logo o dia de hoje não entra

    • Editado Wesley Neves quinta-feira, 2 de fevereiro de 2017 15:34 corriginfo
    terça-feira, 31 de janeiro de 2017 17:05
  • Muito obrigado!
    terça-feira, 31 de janeiro de 2017 17:05
  • Rafael,

    A nível de curiosidade, se você deseja obter a última data do mês a partir da versão 2012 a Microsoft adicionou a função EOMonth()!!!!


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 31 de janeiro de 2017 17:35
  • Deleted
    terça-feira, 31 de janeiro de 2017 20:54
  • José Diz,

    Acredito que não tenha interpretado da maneira correta minha resposta, pelo visto o Rafael interpretou.

    No momento que utiliza-se o DATEADD e quer tirar a "prova real" do resultado, então devemos começar a contar do dia seguinte e não do dia atual. Convenhamos que se o incremento fosse 0 não teria porque tirar a prova e nem iria "contar" nada.

    Caso outros tenham a mesma interpretação, adicionei uma observação.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    terça-feira, 31 de janeiro de 2017 22:17
  • Olá,

    Lembre-se, DATEADD (nos casos que o incremento é maior que 0) não começa a contar no dia atual (31/01). Começa no dia 01/02, portanto como fevereiro tem apenas 28 dias, o resultado da soma de 30 dias será dia 02/03.

    OBS: O valor de incremento que é dado ao DATEADD, deve ser somado a data atual, portanto para efeitos de "prova real" inicia-se a contagem no dia seguinte (salvo se o incremento for 0, pois aí nem tem lógica contar)

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    André,

    Acredito que você esta equivocado, num vi a DateAdd fazer um incremento somente 1 quando o valor de incremento é zero, agora se você se refere a considerar a contagem ai sim faz sentido.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    quinta-feira, 2 de fevereiro de 2017 12:34
  • Exato Junior, me referi a contagem, tanto que no que eu escrevi tem exatamente a palavra "contar" para evitar outras interpretações:

    ".... DATEADD (nos casos que o incremento é maior que 0) não começa a contar no dia atual ..."


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 2 de fevereiro de 2017 15:14