Usuário com melhor resposta
Consulta não respeita o intervalo de Datas ?????

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)
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
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
-