none
Consulta não respeita o intervalo de Datas ????? RRS feed

  • Pergunta

  • Estou usando SQL Server 2005 e tenho um campo data do tipo dateTime este armazena a data + hora
    Exemplo : 2009-07-23 12:03:00.000

    Estou fazendo uma consulta para trazer os registros pelo intervalor de datas da seguinte maneira


    WHERE Convert(nvarchar(10),Data,103) >= '25/08/2009'
    and   Convert(nvarchar(10),Data,103) <= '26/08/2009'


    preciso desse intervalo mas a consulta me retorna datas do dia 27/06/2009 ja fiz de varias forma sem usar o Convert usando o convert invertendo a data para ano / mes /dia e nada funciona quando eu uso o intervalo de apenas um dia de 25/08/2009 a 25/08/2009 ele me tras somente dois registros.

    O que poderia estar ocorrendo ...


    Junior
    • Movido Gustavo Maia Aguiar quarta-feira, 26 de agosto de 2009 13:29 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 25 de agosto de 2009 19:57

Respostas

  • Não mesmo.... você está comparando um intervalo de caracteres (NVarchar) e não um intervalo de datas:

    WHERE Data >= Convert(dateTime, '25/08/2009', 103)
    and   Data <= Convert(DateTime, '26/08/2009', 103)

    Porem desta forma você tem a data das 0:00 horas (2009-07-26 00:00:00.000 )

    Então outro artificio bastante usado é converter a data para VarChar(10) depois para datetime novamente. Assim você compara as duas datas no mesmo formato.

    WHERE Convert(DateTime, Convert(VarChar(10), Data, 103), 103)  >= Convert(dateTime, '25/08/2009', 103)
    and   Convert(DateTime, Convert(VarChar(10), Data, 103), 103) <= Convert(DateTime, '26/08/2009', 103)
    Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/
    • Marcado como Resposta Junior Martins terça-feira, 25 de agosto de 2009 20:33
    terça-feira, 25 de agosto de 2009 20:12

Todas as Respostas

  • Não mesmo.... você está comparando um intervalo de caracteres (NVarchar) e não um intervalo de datas:

    WHERE Data >= Convert(dateTime, '25/08/2009', 103)
    and   Data <= Convert(DateTime, '26/08/2009', 103)

    Porem desta forma você tem a data das 0:00 horas (2009-07-26 00:00:00.000 )

    Então outro artificio bastante usado é converter a data para VarChar(10) depois para datetime novamente. Assim você compara as duas datas no mesmo formato.

    WHERE Convert(DateTime, Convert(VarChar(10), Data, 103), 103)  >= Convert(dateTime, '25/08/2009', 103)
    and   Convert(DateTime, Convert(VarChar(10), Data, 103), 103) <= Convert(DateTime, '26/08/2009', 103)
    Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/
    • Marcado como Resposta Junior Martins terça-feira, 25 de agosto de 2009 20:33
    terça-feira, 25 de agosto de 2009 20:12
  • Fausto muito obrigado mesmo deu certinho, na realidade a forma que eu estava usando o consulta se perdia mesmo

    Vlw mesmo


    Junior
    terça-feira, 25 de agosto de 2009 20:33