Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

robson_castro

Select

Recommended Posts

Senhores, Estou tentando realizar um select convertendo os dados (Campo DateTime), mais os dados que aparecem no resultado é diferente do esperado.Nesse exemplo estou querendo retornar os dados entre as datas 10/10/2005 e 11/10/2005, poréma consulta está retornando os dados de 11/09/2005 (um mês antes). Alguém poderia ajudar-me?Select Convert(Char(10),F.Uht_StartDateTime,103) as Data,U.Uvl_CardNumber as Cartao, Count(U.Uvl_CardNumber) as Total from UfP_Validations U, Ufp_HalfTrips FWhere U.Uht_id = F.Uht_id and Convert(Char(10),F.Uht_StartDateTime,103) between '10/10/2005' and '11/10/2005'Group By F.Uht_StartDateTime,U.Uvl_CardNumberOrder by Count(U.Uvl_CardNumber) desc :wacko: Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A data no teu banco de dados deve estar com configuração americanaMM/DD/AAAA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores, Estou tentando realizar um select convertendo os dados (Campo DateTime), mais os dados que aparecem no resultado é diferente do esperado.Nesse exemplo estou querendo retornar os dados entre as datas 10/10/2005 e 11/10/2005, poréma consulta está retornando os dados de 11/09/2005 (um mês antes). Alguém poderia ajudar-me?Select Convert(Char(10),F.Uht_StartDateTime,103) as Data,U.Uvl_CardNumber as Cartao, Count(U.Uvl_CardNumber) as Total from UfP_Validations U, Ufp_HalfTrips FWhere U.Uht_id = F.Uht_id and Convert(Char(10),F.Uht_StartDateTime,103) between '10/10/2005' and '11/10/2005'Group By F.Uht_StartDateTime,U.Uvl_CardNumbeOrder by Count(U.Uvl_CardNumber) desc :wacko: Desde já agradeço.

Caro Amigo, 1) Você está cometendo um erro gravissímo para performance em Banco de Dados. Quando no predicado na clausúla Where você usa qualquer função em cima de um campo da tabela o mesmo executa a função para cada registro de sua tabela além do que se seu campo estiver indexado o referido indíce não será usado. Imagine se você tem uma tabela de 1 milhão de registro ??2) Faça o seguinte3) Gere um indíce clusterizado para o seu campo Uht_StartDateTime.4) Clausúla Where F.Uht_StartDateTime between '2005/10/10 00:00:00' and '2005/10/11 23:59:00' A data na sua tabela está no formato DateTime ou SmallDateTime, você acrescenta na parte constante da sua data um horário de abrangencia. Você não precisa usar função em lugar algum e a sua query ficará bastante otimizada, pois estara usando o indíce. 5) Uma outra dica de otimização, por exemplo: Se na query abaixo o universo que for menor você pode a precedencia de Matemática para gerar performace, Veja.Where (U.Uht_id = F.Uht_id)and F.Uht_StartDateTime between '2005/10/10 00:00:00' and '2005/10/11 23:59:00'O plano de execução primeiro vai montar o universo menor da precedencia e depois obterá dentro do 1 universo a sua abrangencia da data.Sds, Antonio Sergioluzserg@globo.com http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antonio Sergio,Eu coloquei dessa forma pois estava apenas realizando alguns testes, porém eu estava siente de que isso causaria muita perda de performance no meu benco. Obrigado pela atenção. Obrigado a todos. Robson.

Compartilhar este post


Link para o post
Compartilhar em outros sites

...5) Uma outra dica de otimização, por exemplo: Se na query abaixo o universo que for menor você pode a precedencia de Matemática para gerar performace, Veja.Where (U.Uht_id = F.Uht_id)and F.Uht_StartDateTime between '2005/10/10 00:00:00' and '2005/10/11 23:59:00'O plano de execução primeiro vai montar o universo menor da precedencia e depois obterá dentro do 1 universo a sua abrangencia da data....

Desculpe, então quer dizer que:Where (U.Uht_id = F.Uht_id)and F.Uht_StartDateTime between '2005/10/10 00:00:00' and '2005/10/11 23:59:00'Seria mais rápido que:Where U.Uht_id = F.Uht_idand F.Uht_StartDateTime between '2005/10/10 00:00:00' and '2005/10/11 23:59:00'????

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.