Filtrar dados a partir de campos DateTime
Olá pessoal,
Eu tenho a seguinte instrução sql (group by) para filtrar dados do banco de dados:
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
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
Curtidas 0
Melhor post
Marcos P
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 :
As diversas possibilidade de formato, você acha em : https://msdn.microsoft.com/pt-br/library/ms187928.aspx
Boa sorte !
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 !
GOSTEI 1
Mais Respostas
Thiago Santana
26/03/2015
Hugo, tenta usar o CONVERT(VARCHAR,SEUCAMPO,103)
GOSTEI 0
Marcos P
26/03/2015
Qual o tipo de @dtInicial e @dtFinal ?
São variáveis char ?
São variáveis char ?
GOSTEI 0
Hugo
26/03/2015
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 ?
GOSTEI 0
Hugo
26/03/2015
Qual o tipo de @dtInicial e @dtFinal ?
São variáveis char ?
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
GOSTEI 0
Thiago Santana
26/03/2015
Hugo, veja o código que o Marcos te mandou!
Ai ele utiliza o convert!
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 :
As diversas possibilidade de formato, você acha em : https://msdn.microsoft.com/pt-br/library/ms187928.aspx
Boa sorte !
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 !
Ai ele utiliza o convert!
GOSTEI 1
Hugo
26/03/2015
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 :
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)
GOSTEI 0
Marcos P
26/03/2015
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 !
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 !
GOSTEI 0
Thiago Santana
26/03/2015
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?
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?
GOSTEI 0
Hugo
26/03/2015
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?
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
GOSTEI 0
Thiago Santana
26/03/2015
Que bom Hugo!
Conhecimento é pra ser compartilhado!
Abraço
Conhecimento é pra ser compartilhado!
Abraço
GOSTEI 0