none
Utilizar datediff RRS feed

  • Pergunta


  • Possuo uma tabela que tem um campo varchar.

    Nesse campo tenho alguns dados que estão desta forma.

    Exemplo: 12/15/2014 8:32:13 AM

    Preciso pegar os items com mais de 2 dias da data atual.

    estou tentando desta maneira:

    datediff(day, convert(date, dataPergunta, 101), getdate()) > 2

    E fica dando erro.

    Alguem poderia me ajuda?

    Ogrigado.

    quarta-feira, 2 de dezembro de 2015 18:57

Respostas

  • Experimente dessa forma:

    SELECT * FROM consultasPendentes 
    WHERE 
        ([log] = 'Reservada' OR [log] = 'Em Andamento') AND
        idArea = 3 AND
        case ISDATE(dataPergunta) = 1
            then datediff(day, convert(date, dataPergunta, 103), getdate()) 
            else 0
        end >= 2
    

    Espero que ajude.


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

    • Sugerido como Resposta SimorC quinta-feira, 3 de dezembro de 2015 18:40
    • Marcado como Resposta Duducolussi quinta-feira, 3 de dezembro de 2015 19:27
    quinta-feira, 3 de dezembro de 2015 18:32

Todas as Respostas

  • Duducolussi,

    Qual erro?


    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, 2 de dezembro de 2015 19:53
  • Conversion failed when converting date and/or time from character string. Severity 16
    quarta-feira, 2 de dezembro de 2015 20:01
  • Boa tarde,

    Acredito que existam linhas com valores inválidos para a conversão para o tipo Date.

    Experimente utilizar a função IsDate para desconsiderar essas linhas. Ex:

    set dateformat mdy;
    select * from Tabela
    where
        ISDATE(dataPergunta) = 1 AND
        datediff(day, convert(date, dataPergunta, 101), getdate()) > 2

    Espero que ajude.


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

    • Sugerido como Resposta SimorC quinta-feira, 3 de dezembro de 2015 18:39
    quarta-feira, 2 de dezembro de 2015 20:35
  • Não rolou.

    Aqui o meu select

    SELECT * FROM consultasPendentes WHERE (dataPergunta LIKE '%am' or dataPergunta LIKE '%pm')
    AND
    datediff(day, convert(date, dataPergunta, 103), getdate()) >= 2
    AND ([log] = 'Reservada' OR [log] = 'Em Andamento')
    AND idArea = 3

    quinta-feira, 3 de dezembro de 2015 11:16
  • Você tentou adicionar o IsDate conforme sugeri? O que ocorreu?

    Se a data está no formato mm/dd/yyyy conforme o exemplo do primeiro post é necessário utilizar o parâmetro 101 em vez do 103 no Convert.


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

    quinta-feira, 3 de dezembro de 2015 12:19
  • Tentei com o isdate, mas ele só verifica se é data ou não.

    Essa parte do 101 e 103 estava testando e também não deu certo.

    quinta-feira, 3 de dezembro de 2015 16:02
  • Sim, mas utilizando o IsDate da forma como sugeri, o Convert não será executado quando o valor da coluna não for uma data válida, e consequentemente não deverá ocorrer o erro.

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

    quinta-feira, 3 de dezembro de 2015 16:23
  • os valores são validos, porque são datas geradas de micros diferentes e não padronizaram.

    agora tenho esse pepino, preciso fazer uma verificação se já fechou mais 48 ou mais de 2 dias.

    A parte que estou tendo problema é com esse formato: 12/15/2014 8:32:13 AM

    quinta-feira, 3 de dezembro de 2015 17:34
  • Experimente dessa forma:

    SELECT * FROM consultasPendentes 
    WHERE 
        ([log] = 'Reservada' OR [log] = 'Em Andamento') AND
        idArea = 3 AND
        case ISDATE(dataPergunta) = 1
            then datediff(day, convert(date, dataPergunta, 103), getdate()) 
            else 0
        end >= 2
    

    Espero que ajude.


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

    • Sugerido como Resposta SimorC quinta-feira, 3 de dezembro de 2015 18:40
    • Marcado como Resposta Duducolussi quinta-feira, 3 de dezembro de 2015 19:27
    quinta-feira, 3 de dezembro de 2015 18:32
  • Cara ele estava dando uns erros alterei ele e funcionou.

    Ficou assim:

    SELECT * FROM consultasPendentes
    WHERE
        ([log] = 'Reservada' OR [log] = 'Em Andamento') AND
        idArea = 3 AND
        (dataPergunta LIKE '%am' or dataPergunta LIKE '%pm')AND
        case
        WHEN ISDATE(dataPergunta) = 1 then datediff(day, convert(date, dataPergunta, 101), getdate())
        else 0
        end >= 2

    Obrigado.

    quinta-feira, 3 de dezembro de 2015 19:27