Ir para conteúdo

Arquivado

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

VINICIUS RAMOS

Selecionar dados em um período de 3 meses

Recommended Posts

falai camarada Vinicius,

 

com a função dateadd você pode pegar a data de hoje (getdate) e subtrair 90 dias

 

select dateadd(Day, -90, getdate())

desta forma é só usar no where do select, exemplo:

set nocount ondeclare @tbTeste table (data datetime)insert into @tbTeste (data) values ('2007-04-04')insert into @tbTeste (data) values ('2007-05-04')insert into @tbTeste (data) values ('2007-06-04')insert into @tbTeste (data) values ('2007-07-04')insert into @tbTeste (data) values ('2007-08-04')select * from @tbTestewhere data > dateadd(Day, -90, getdate())

veja mais sobre datas: http://forum.imasters.com.br/index.php?showtopic=224454

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva,Só um detalhe: veja que 90 dias não são três meses (existe mês com 28, 29, 30 e 31 dias), sendo assim, esta forma de verificação vai retornar resultados inesperados (isto é, errados). Concorda???Luciana

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Luciana2,

 

depende da regra, no caso que você especificou estaria incorreto, teria que ser tratado de outra forma, para casos em que seria 90 dias direto estaria correto

 

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva,

 

Correto!

 

Mas veja que o Vinícios especificou desta forma "Selecionar dados em um período de 3 meses", assim sendo, 90 dias é diferente de 3 meses, por isso mesmo que da forma que você especificou vai dá errado.

 

Concorda?

 

Da forma que o Edilesio colocou é mais correto. Embora nunca tenha feito teste.

 

Luciana

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva,

 

Correto!

 

Mas veja que o Vinícios especificou desta forma "Selecionar dados em um período de 3 meses", assim sendo, 90 dias é diferente de 3 meses, por isso mesmo que da forma que você especificou vai dá errado.

 

Concorda?

 

Da forma que o Edilesio colocou é mais correto. Embora nunca tenha feito teste.

 

Luciana

Luciana

 

 

como eu disse, depende, no caso especificado acima SIM concordo...

 

agora em outros casos, por exemplo tenho clientes que o prazo é 30 dias corridos e outros 1 mês, exemplo se eu emitir uma nf com data de emissão/saída hoje 28/08/2007:

- para o cliente "A" 30 dias, o vencimento será em 27/09/2007, onde temos:

select getdate() as dataPedido, dateadd(Day, 30, getdate()) as DataVecto
que retorna:
dataPedido											 DataVecto											  ------------------------------------------------------ ------------------------------------------------------ 2007-08-28 07:11:08.750								2007-09-27 07:11:08.750(1 row(s) affected)
- para o cliente "B" 1 mês, o vecimento será em 28/09/2007, onde temos:
select getdate() as dataPedido, dateadd(Month, 1, getdate()) as DataVecto
que retorna:

dataPedido											 DataVecto											  ------------------------------------------------------ ------------------------------------------------------ 2007-08-28 07:12:18.357								2007-09-28 07:12:18.357(1 row(s) affected)
bjssss pras moça e abs pros d+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius,Fazer da forma que Edilesio indicou também ocorre uma falha. Qual seja:1º casoselect datediff(month,'05/01/2007',getdate()) as "Qtd Meses"- o valor de retorno será: 32º casoselect datediff(month,'05/31/2007',getdate()) as "Qtd Meses"- o valor de retorno será: 3Entendeu o erro?O SQL Server entende uma fração de mês como sendo 1 mês inteiro. De 31/05/2007 até hoje não são três meses. Dá menos.Se quiser precisão, terá que bolar uma função para isso. Eu acho.ps. tem razão Eriva. Ah, você já me ajudou várias vezes.Luciana

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.