Ir para conteúdo

Arquivado

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

Linked

Filtrar dados a partir de campos DateTime

Recommended Posts

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 CcaProtocolo 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Linked.

 

Pode utilizar o seguinte convert:

select convert(char(8),GETDATE(),112)

Substitua o getdate() pelo campo ou variável que precisa:

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

Segue abaixo alguns exemplos de convert:

SELECT convert(varchar, getdate(), 100) – mon dd yyyy hh:mmAM (or PM)
                                        – Oct  2 2008 11:01AM          
SELECT convert(varchar, getdate(), 101) – mm/dd/yyyy - 10/02/2008                  
SELECT convert(varchar, getdate(), 102) – yyyy.mm.dd – 2008.10.02           
SELECT convert(varchar, getdate(), 103) – dd/mm/yyyy
SELECT convert(varchar, getdate(), 104) – dd.mm.yyyy
SELECT convert(varchar, getdate(), 105) – dd-mm-yyyy
SELECT convert(varchar, getdate(), 106) – dd mon yyyy
SELECT convert(varchar, getdate(), 107) – mon dd, yyyy
SELECT convert(varchar, getdate(), 108) – hh:mm:ss
SELECT convert(varchar, getdate(), 109) – mon dd yyyy hh:mm:ss:mmmAM (or PM)
                                        – Oct  2 2008 11:02:44:013AM   
SELECT convert(varchar, getdate(), 110) – mm-dd-yyyy
SELECT convert(varchar, getdate(), 111) – yyyy/mm/dd
SELECT convert(varchar, getdate(), 112) – yyyymmdd
SELECT convert(varchar, getdate(), 113) – dd mon yyyy hh:mm:ss:mmm
                                        – 02 Oct 2008 11:02:07:577     
SELECT convert(varchar, getdate(), 114) – hh:mm:ss:mmm(24h)
SELECT convert(varchar, getdate(), 120) – yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) – yyyy-mm-ddThh:mm:ss.mmm
                                        – 2008-10-02T10:52:47.513
– SQL create different date styles with t-sql string functions
SELECT replace(convert(varchar, getdate(), 111), ‘/’, ‘ ‘) – yyyy mm dd
SELECT convert(varchar(7), getdate(), 126)                 – yyyy-mm
SELECT right(convert(varchar, getdate(), 106), 8)          – mon yyyy

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Cosme Ferreira,

 

Muito obrigado por responder a minha questão.

 

Sua resposta foi simplesmente completa, didática e funcionou perfeitamente pra mim.

 

 

Forte abraço e fique na paz!

 

Hugo

Compartilhar este post


Link para o post
Compartilhar em outros sites

De uma olhada em um post sobre calculos de datas:

 

https://adjuniordba.wordpress.com/2014/01/30/calculo-simples-de-data/

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 CcaProtocolo 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".

 

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" ???

 

 

Internamente o SQL Server armazena as datas em um formato próprio, que depende do tipo de dados (date, datetime, datetime2 etc). Ele não armazena no formato "yyyy/mm/dd" ou similares.

 

Para atender ao que necessita, basta declarar as variáveis @dtInicial e @dtFinal como datetime e utilizar a função Convert() para definir os valores nessas variáveis. O resto fica do jeito que está.

declare @dtInicial datetime, @dtFinal datetime;

set @dtInicial= Convert(datetime, '20/1/2015', 103);
set @dtFinal= Convert(datetime, '28/2/2015', 103);

SELECT ...

A coluna Cadastro, declarada como datetime, armazena somente datas (por exemplo, "2015-02-15 00:00:00.000") ou também horário (por exemplo, "2015-02-15 18:22:33.187")?

 

Em tempo, evite a utilização de funções na cláusula WHERE que atuem diretamente sobre colunas da tabela. Isso pode causar Index/Table Scan e degradar a performance da consulta.

 

_____

linkedin.gif José Diz Belo Horizonte, MG - Brasil

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Internamente o SQL Server armazena as datas em um formato próprio, que depende do tipo de dados (date, datetime, datetime2 etc). Ele não armazena no formato "yyyy/mm/dd" ou similares.

 

Para atender ao que necessita, basta declarar as variáveis @dtInicial e @dtFinal como datetime e utilizar a função Convert() para definir os valores nessas variáveis. O resto fica do jeito que está.

declare @dtInicial datetime, @dtFinal datetime;

set @dtInicial= Convert(datetime, '20/1/2015', 103);
set @dtFinal= Convert(datetime, '28/2/2015', 103);

SELECT ...

A coluna Cadastro, declarada como datetime, armazena somente datas (por exemplo, "2015-02-15 00:00:00.000") ou também horário (por exemplo, "2015-02-15 18:22:33.187")?

 

Em tempo, evite a utilização de funções na cláusula WHERE que atuem diretamente sobre colunas da tabela. Isso pode causar Index/Table Scan e degradar a performance da consulta.

 

_____

linkedin.gif José Diz Belo Horizonte, MG - Brasil

Bom dia José Diz,

 

Muito boa a sua explicação, muito obrigado pelos esclarecimentos.

 

Forte abraço e fique na paz!

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.