Filtrar dados a partir de campos DateTime

26/03/2015

0

Olá pessoal,

Eu tenho a seguinte instrução sql (group by) para filtrar dados do banco de dados:

SELECT P.Descricao, COUNT (C.Id) as Quantidade,
       SUM (C.ValorTotalServico) AS Valor FROM Protocolo C INNER JOIN TipoServico
       as T ON T.Id = C.ServicoId INNER JOIN PlanoContasFinanceiro AS P ON P.Id = T.PlanoContasFinanceiroId WHERE ((C.Cadastro > = @dtInicial)
       and (C.Cadastro < = @dtFinal))
       and (C.ExclusaoEm IS NULL AND C.Inativo = 0) GROUP BY P.Descricao


As variáveis @dtInicial e @dtFinal, contém as datas no formato brasileiro "dd/mm/yyyy".



O campo "Cadastro" da minha tabela que utilizo na clausula "Where", contém as datas (datetime) armazenadas no formato americano "mm/dd/yyyy hh:mm:ss", ou seja, o campo "Cadastro" contem também a hora, minuto e segundo que eu preciso desprezar na minha consulta.



Gostaria de saber dos colegas, como faço para filtrar e formatar na minha instrução SQL acima (tanto nas variáveis como no campo Cadastro), as datas no formato "yyyy/mm-dd" ???



Abraços
Hugo

Hugo

Responder

Post mais votado

26/03/2015

Para formatar a data no formato que você precisa, embora a conversão implícita do Sql Server deve resolver o problema, siga a dica do Thiago... use convert !

Tenta assim :

SELECT P.Descricao, COUNT (C.Id) as Quantidade,
       SUM (C.ValorTotalServico) AS Valor 
FROM Protocolo C INNER JOIN TipoServico as T ON T.Id = C.ServicoId 
                 INNER JOIN PlanoContasFinanceiro AS P ON P.Id = T.PlanoContasFinanceiroId 
WHERE ((C.Cadastro >= convert(datetime,@dtInicial,101))
       and (C.Cadastro <= convert(datetime,@dtFinal,101)))
       and (C.ExclusaoEm IS NULL AND C.Inativo = 0) 
GROUP BY P.Descricao

As diversas possibilidade de formato, você acha em : https://msdn.microsoft.com/pt-br/library/ms187928.aspx

Boa sorte !

Marcos P

Marcos P
Responder

Mais Posts

26/03/2015

Thiago Santana

Hugo, tenta usar o CONVERT(VARCHAR,SEUCAMPO,103)
Responder

26/03/2015

Marcos P

Qual o tipo de @dtInicial e @dtFinal ?

São variáveis char ?
Responder

26/03/2015

Hugo

Hugo, tenta usar o CONVERT(VARCHAR,SEUCAMPO,103)


Bom dia Thiago, muito obrigado pelo feedback.

Eu sou muito "fraco" em SQL server, mas como seria isso na minha instrução ?
Responder

26/03/2015

Hugo

Qual o tipo de @dtInicial e @dtFinal ?

São variáveis char ?


Olá Marcos como vai tudo bem?! tudo na paz?!

As minhas variáveis @dtInicial e @dtFinal são do tipo Date
Responder

26/03/2015

Hugo

Antes de mais nada, gostaria de agradecer a você Marcos e ao Thiago Santana pela boa vontade em me responder prontamente.

Marcos, ainda me resta uma dúvida, baseado na sugestão do Thiago, seria prudente também converter o "C.Cadastro" também ?, ou seja, tipo assim :

WHERE ((convert(date,C.Cadastro,103) >= convert(date,@dtInicial,103))
       and (convert(date, C.Cadastro,103) <= convert(date,@dtFinal,103)))
       and (C.ExclusaoEm IS NULL AND C.Inativo = 0) 
Responder

26/03/2015

Marcos P

No modo nativo, todos os campo datetime no Sql Server são armazenados como : mês dd aaaa hh:miAM ( 100 ).

A conversão pode ser feita para qualquer formato, em qualquer variável e em qualquer ponto da query.

Por ser uma questão implícita ao processador do Sql Server, não existe perda de performance nessas conversões.

Resumindo... use como lhe for mais conveniente !
Responder

26/03/2015

Thiago Santana

Isso mesmo Hugo!
Como você está fazendo uma comparação de dados no Where é necessário trabalhar com os mesmos campos no mesmo formato!
E aí conseguiu resolver o problema?
Responder

26/03/2015

Hugo

Isso mesmo Hugo!
Como você está fazendo uma comparação de dados no Where é necessário trabalhar com os mesmos campos no mesmo formato!
E aí conseguiu resolver o problema?


Funcionou beleza Thiago, graças a vocês.

Convertendo os dois lados (campo tabela e a variável) consegui obter êxito na minha consulta.

Valeu demais e mais uma vez muito obrigado pela paciência e boa vontade.

Fiquem na paz!

Abraços
Responder

26/03/2015

Thiago Santana

Que bom Hugo!
Conhecimento é pra ser compartilhado!
Abraço
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar