Ir para conteúdo

Arquivado

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

Lilian Butkevicis

Filtrar por Data

Recommended Posts

Bom dia,

 

Alguém aí poderia me ajudar com a seguinte dúvida:

Preciso fazer um Select filtrando pela data, mas considerando apenas MES E ANO.

 

Por exemplo: Trazer tudo que existir antes de Setembro de 2007.

A principio poderia ser algo do tipo: Data<='2007/08/31'

 

Exceto pelo detalhe que na tabela é armazenado apenas o Mes (num campo) e o Ano (em outro).

 

Como fazer?? http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lilian,

 

Assim, de bate-pronto, a primeira coisa que me ocorre é criar no banco uma funçãozinha que "calcule" o último dia baseado no mês e ano que estão na tabela.

 

Abaixo segue um modelo que pode ser ajustado as suas necessidades...

 

-- retorna o ultimo dia de um mês / ano qualquercreate function UltDiaMes(@Mes smallint, @Ano smallint)returns smallintasbegin  declare @LastDay  smallint   declare @UltDia   smalldatetime  if (@Mes = 12)                               -- quebra de mês e ano     set @LastDay = 31  else     set @UltDia  = convert(smalldatetime,('01/' + convert(char(2),@Mes+1) + '/' + convert(char(4),@Ano)),103) - 1     set @LastDay = datepart(dd,@UltDia)  if (@Mes = 2 and (@Ano%4 = 0))     -- trata fevereiro em ano bissexto     set @LastDay = 29  return(@LastDay)end

Depois de criar a função, você pode concatenar as colunas que você já tem na tabela com o último dia calculado e comparar com uma data qualquer.

 

set nocount on-- tabela exemplo   create table #tabela    (Mes smallint,    Ano smallint   )   go-- carrega dados exemplo   insert #tabela values (01,2007)   insert #tabela values (03,2007)   insert #tabela values (05,2007)   insert #tabela values (07,2007)   insert #tabela values (09,2007)   insert #tabela values (02,2007)   insert #tabela values (02,2008)   go -- seleção de dados (exemplo)   select Mes, Ano, master.dbo.UltDiaMes(Mes,Ano) as UltDia,          convert(smalldatetime, convert(char(2),Mes) + '/' + convert(char(2),master.dbo.UltDiaMes(Mes,Ano)) + '/' + convert(char(4),Ano))   from #tabela   where convert(smalldatetime, convert(char(2),Mes) + '/' + convert(char(2),master.dbo.UltDiaMes(Mes,Ano)) + '/' + convert(char(4),Ano)) <= '07/15/2007'-- drop temp   drop table #tabela   goset nocount off

Será que isto te ajuda ?

 

T+

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.