Usuário com melhor resposta
Busca por datas

Pergunta
-
Pessoa tenho os seguintes registros numa tabela:
numerogmud data
---------- ------------------------------------------------------
123 2011-01-12 16:46:00
1234 2011-01-10 16:47:00
12345 2011-01-13 16:50:00
123456 2011-01-12 16:50:00
quero pegar todos os registros que estão entre os dias 12 e 13 de janeiro de 2011. então fiz o seguinte:
select * from gmud where data between convert(varchar(10),'2011-01-12',121) and convert(varchar(10),'2011-01-13',121)
porém, não está me trazendo o registro do dia 13 que é o 12345.
a data é do tipo smalldatetime
pq?
Respostas
-
Boa Tarde,
O momento "2011-01-13 16:50:00" é maior que o momento "2011-01-13", pois, esse segundo significa às 0h. Para evitar problemas com datas e planos de execução ineficientes, eu recomendo consultar no formato YYYYMMDD (sem hífen) e delimitar o intervalo com o valor inicial >= e o valor final <. Ex:
declare @t table (numerogmud int, data datetime) insert into @t values (123,'2011-01-12 16:46:00') insert into @t values (1234,'2011-01-10 16:47:00') insert into @t values (12345,'2011-01-13 16:50:00') insert into @t values (123456,'2011-01-12 16:50:00') select numerogmud, data from @t where data >= '2011-01-12' and data < '2011-01-14'
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.wordpress.com/Simulado para o Exame 70-433 – MCTS: Microsoft SQL Server 2008 – Database Development – Parte 07
http://gustavomaiaaguiar.wordpress.com/2010/12/31/simulado-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development-%e2%80%93-parte-07/
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 12 de janeiro de 2011 19:17
- Marcado como Resposta Eder Costa sexta-feira, 14 de janeiro de 2011 17:23
Todas as Respostas
-
Rafa martin,
o convert deve esta na sua coluna data, pois ela tem hora e v eta passando um filtro sem a hora, teste o script abaixo
declare @tbTeste table (numerogmud int, data smalldatetime) insert into @tbTeste values(123,'2011-01-12 16:46:00') insert into @tbTeste values(1234,'2011-01-10 16:47:00') insert into @tbTeste values(12345,'2011-01-13 16:50:00') insert into @tbTeste values(123456,'2011-01-12 16:50:00') select * from @tbTeste where convert(varchar(10),data,121) between '2011-01-12' and '2011-01-13'
att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
Rafa-Martin
Quando se utiliza o comando BETWEEN ele contempla o intervalo informado, inclusive os próprios valores. No seu caso, a data limite será 2011-01-13, entretanto, como vc não informou a hora na conversão, o SQL vai assumir valores zeros e sua data limite (completa) será 2011-01-13 00:00:00.000.
Sendo assim, a data cadastrada na tabela (dia 13) tem um horário cadastrado e é depois da data assumida pelo SQL, portanto, não será retornada na sua consulta.
Se vc alterar para dia 14 o limite do BETWEEN, o dia 13 da tabela já será retornado.
Abraços
Erickson Ricci - MCP, MCTS, MCTS BI - ericksonricci.wordpress.com -
Boa Tarde,
O momento "2011-01-13 16:50:00" é maior que o momento "2011-01-13", pois, esse segundo significa às 0h. Para evitar problemas com datas e planos de execução ineficientes, eu recomendo consultar no formato YYYYMMDD (sem hífen) e delimitar o intervalo com o valor inicial >= e o valor final <. Ex:
declare @t table (numerogmud int, data datetime) insert into @t values (123,'2011-01-12 16:46:00') insert into @t values (1234,'2011-01-10 16:47:00') insert into @t values (12345,'2011-01-13 16:50:00') insert into @t values (123456,'2011-01-12 16:50:00') select numerogmud, data from @t where data >= '2011-01-12' and data < '2011-01-14'
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.wordpress.com/Simulado para o Exame 70-433 – MCTS: Microsoft SQL Server 2008 – Database Development – Parte 07
http://gustavomaiaaguiar.wordpress.com/2010/12/31/simulado-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development-%e2%80%93-parte-07/
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 12 de janeiro de 2011 19:17
- Marcado como Resposta Eder Costa sexta-feira, 14 de janeiro de 2011 17:23
-