none
Manipulação de Data RRS feed

  • Pergunta

  • Olá pessoal, estou com uma dúvida, realmente já quebrei bastante a cabeça com isso, como eu posso estar fazendo esse filtro pela data, como o exemplo abaixo.

    CREATE TABLE teste -- Criando uma tabela de teste
    (
    	Id INT IDENTITY(1,1),
    	DataAtual DATETIME
    )
    
    INSERT teste
    VALUES
    (GETDATE())
    GO

    Quando eu faço o SELECT abaixo ele me retorna todas as linhas "ignorando o WHERE"

    SELECT 
    	*
    FROM 
    	teste
    WHERE
    CAST(DataAtual AS VARCHAR(30)) >'2013-04-17 23:42:43.780'

    Por favor, alguem pode me ajudar como eu posso estar fazendo esse filtro?

    Eu preciso de considerar as Hora/Minuto/Segundo

    Muito obrigado


    Wellinghton Pimentel Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.



    quinta-feira, 18 de abril de 2013 02:59

Respostas

Todas as Respostas

  • Wellinghton você não precisa e não deve rs usar o cast na coluna da tabela, no where vc esta pegando tudo maior q a data que vc esta indicando.

    Por exemplo a data inserida 2013-04-18 08:50:00.947

    se vc colocar no where a data 2013-04-18 08:50:01.947 o registro não vai aparecer.

    quinta-feira, 18 de abril de 2013 11:58
  • Então dcccorrea, na verdade ele me retorna todas as datas.

    Preciso fazer o filtro pela data considerando a hora 2013-04-18 08:50:01.947

    Quando eu faço isso ele me retorna todas as datas, ao invés dele me retornar apenas as datas maiores que a indicada ele está me retornando todas.

    Exemplo:

    WHERE
    CAST
    (DataAtual AS VARCHAR(30)) > '2013-04-17 23:42:43.780'


    Wellinghton Pimentel Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 18 de abril de 2013 12:08
  • Vixi, acho que não estou entendendo isso de retornar todas as datas.

    Por exemplo se vc tem na tabela os seguintes dados

    Id          DataAtual

    ----------- -----------------------

    1           2013-04-18 08:50:00.947

    2           2013-04-18 09:30:59.627

    3           2013-04-17 23:00:00.000

    e vc faz a seguinte consulta retorna somente 2 registros (id 1 e 2)

    SELECT
     *
    FROM
     teste
    WHERE
    DataAtual >'2013-04-17 23:42:43.780'

    quinta-feira, 18 de abril de 2013 12:35
  • Deleted
    quinta-feira, 18 de abril de 2013 13:09
  • Obrigado a todos pelas Dicas

    José Diz realmente deu certo utilizando o SET DATEFORMAT ymd

    Essa query abaixo que eu fiz também deu certo, porém é recomendado utilizar o SET DATEFORMAT ymd, ao invés do CONVERT no WHERE? 

    SELECT 
    	*
    FROM 
    	teste
    WHERE
    	CONVERT(VARCHAR(23), DataAtual, 121) <= '2013-04-18 09:43:16.750'

    José Diz, quando eu utilizado o DATEFORMAT ele é valido apenas para a minha sessão aberta, é possível eu colocar essa informação como padrão em cima de apenas 1 banco?

    Muito obrigado


    Wellinghton Pimentel Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 18 de abril de 2013 14:03
  • Deleted
    quinta-feira, 18 de abril de 2013 14:27
  • Deleted
    quinta-feira, 18 de abril de 2013 14:38
  • Entendi, então o que estava acontecendo era que o meu DATATIME ativo estava diferente de 'yyyy-mm-dd hh mm:dd.mmm'

    Provavelmente estava em dmy, quando eu fazia a comparação sem a conversão retorna erro.

    E com o comando SET DATEFORMAT ymd, estou mudando o meu formato ativo para esse formato 'yyyy-mm-dd hh mm:dd.mmm'

    O meu raciocínio esta correto?

    Muito obrigado mais uma vez José Diz


    Wellinghton Pimentel Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 18 de abril de 2013 14:49
  • Deleted
    quinta-feira, 18 de abril de 2013 23:40