none
Problemas com mês de fevereiro RRS feed

  • Pergunta

  • Boa tarde,

    Estou com um problema aqui, antes não estava acontecendo, apenas notei o meu erro em Fevereiro.

    Tenho uma data no banco gravado como 30/01/2010 e preciso apresentar aproveitar somente o dia, porém 30/02, não existe, ai acontece meu erro, se fosse 27/01/2010, tranquilo, ficaria 27/02/2015, sem problema, até fiz mais ficou muito complexo, acredito que tenha como fazer de maneira mais simples.

    Desde já agradeço

    segunda-feira, 2 de fevereiro de 2015 17:36

Respostas

Todas as Respostas

  • Boa tarde,

    Fábio, qual deveria ser o resultado para o dia 30?

    Talvez você consiga obter o resultado desejado utilizando a função Dateadd para somar 1 mes. Ex:

    select DATEADD(month, 1, ColunaData)

    Espero que ajude.


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

    segunda-feira, 2 de fevereiro de 2015 17:44
  • Obrigado pela resposta.

     28/02/15

    28 - Como não existe 30
    02 - Mês Corrente
    15 - Ano corrente

    segunda-feira, 2 de fevereiro de 2015 18:18
  • Então experimente fazer um teste com a Dateadd como sugeri anteriormente:

    declare @Data date = '20150130';
    select DATEADD(month, 1, @Data)
    

    Espero que ajude.


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

    segunda-feira, 2 de fevereiro de 2015 18:24
  • Mas quando for 20141230 não vai funcionar, pois preciso que a resposta seja o mês e ano corrente.
    segunda-feira, 2 de fevereiro de 2015 18:31
  • Obrigado pela resposta.

     28/02/15

    28 - Como não existe 30
    02 - Mês Corrente
    15 - Ano corrente

    Fabio,

    Utilize a função EOMONTH. Segue um exemplo para você adaptar ao seu script:

    DECLARE @date DATETIME = '2015-02-12';
    SELECT EOMONTH ( @date ) AS Result;
    GO
    
    DECLARE @date DATETIME = '2015-01-12';
    SELECT EOMONTH ( @date ) AS Result;
    GO


    Para maiores informações veja:

    https://msdn.microsoft.com/pt-br/library/hh213020.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    segunda-feira, 2 de fevereiro de 2015 18:36
    Moderador
  • Até havia achado este comando, porém somente se o dia não existir preciso pegar o ultimo.
    segunda-feira, 2 de fevereiro de 2015 18:39
  • Não sei se entendi corretamente a sua necessidade, mas experimente fazer um teste:

    declare @Data date = '20100130';
    select @Data, DATEADD(MONTH, DATEDIFF(MONTH, @Data, CURRENT_TIMESTAMP), @Data)
    

    Espero que ajude.


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

    • Marcado como Resposta Fábio Freitas terça-feira, 3 de fevereiro de 2015 10:54
    segunda-feira, 2 de fevereiro de 2015 18:53
  • Até havia achado este comando, porém somente se o dia não existir preciso pegar o ultimo.

    Fabio,

    Então crie um tratamento caso a data seja inválida, veja o script abaixo:

    DECLARE @DATAPROPOSTA VARCHAR(10) = '2015-02-30';
    DECLARE @DATACORRETA  DATETIME
    BEGIN TRY
    	SET @DATACORRETA = EOMONTH(@DATAPROPOSTA);
    END TRY
    BEGIN CATCH
    	SET @DATACORRETA = EOMONTH(LEFT(@DATAPROPOSTA,4) + '-' + SUBSTRING(@DATAPROPOSTA,6,2) + '-01');
    END CATCH
    
    SELECT @DATACORRETA AS RESULT;
    GO

    Neste caso eu criei a variável com o tipo "varchar" e converti posteriormente para usar a função EOMONTH.

    Veja abaixo a Evidência de Teste:

    Não esqueça de marcar como resposta todos os posts que ajudaram na sua solução!

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    segunda-feira, 2 de fevereiro de 2015 19:43
    Moderador
  • Deleted
    segunda-feira, 2 de fevereiro de 2015 23:54
  • Obrigado pelas respostas.

    Gapimex, sua solução esta atendendo o meu problema.

    terça-feira, 3 de fevereiro de 2015 10:56