Filtrar dados a partir de campos DateTime
26/03/2015
0
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
Post mais votado
26/03/2015
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
Mais Posts
26/03/2015
Marcos P
São variáveis char ?
26/03/2015
Hugo
Bom dia Thiago, muito obrigado pelo feedback.
Eu sou muito "fraco" em SQL server, mas como seria isso na minha instrução ?
26/03/2015
Hugo
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
26/03/2015
Hugo
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)
26/03/2015
Marcos P
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 !
26/03/2015
Thiago Santana
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?
26/03/2015
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
26/03/2015
Thiago Santana
Conhecimento é pra ser compartilhado!
Abraço
Clique aqui para fazer login e interagir na Comunidade :)