Ir para conteúdo

POWERED BY:

Arquivado

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

notax

datepart dentro da query

Recommended Posts

Pessoal, bom dia.

 

Mais uma vez to com dúvida numa sintaxe envolvendo datas em um BD access...

 

Vejam o caso:

 

Tenho um campo "datai" (data inicial) que pode ter qq valor, exemplo: 12/04/2011 e tenho tb um campo "dataf" (data final) que da mesma forma pode ter qq valor, exemplo 12/10/2011...

 

Bom, na consulta tenho uma variável, cahamada "datav" qq, que sempre terá o primeiro dia do mês, exemplo:

Consulta mês de março: 01/03/2011

Consulta mês de abril: 01/04/2011

Consulta mês de maio: 01/05/2011

 

Então o que eu preciso é que quando eu selecionar a consulta de março o registro com intervalo 12/04/2011 não apareça, no entanto, se eu fizer a consulta entre abril de 2011 e outubro de 2011 o registro usado como exemplo deverá aparecer.

 

Como eu pretendo resolver? Usando um between desta forma: where datav between datai and dataf

 

Até aqui tudo ótimo... o problema é que datai e dataf são campos do bd...

 

Então eu preciso de ajuda em duas coisas:

 

1)eu sei que se eu pegar e fizer:

mes_datai = datepart("m", datai)
ano_datai = datepart("yyyy", datai)
datai_modificada = "01"&"/"&mes_datai&"/"&ano_datai

terei então a data inicial que eu preciso, ou seja, modificarei o valor do dia... mas como fazer tudo isso diretamente na própria query?

 

2) eu sei que se eu pegar e fizer:

dataf_primeira_modificacao = dateadd("m", 1, dataf)
mes_dataf_primeira_modificacao = datepart("m", dataf_primeira_modificacao)
ano_dataf_primeira_modificacao = datepart("yyyy", dataf_primeira_modificacao)
dataf_segunda_modificacao = "01"&"/"&mes_dataf_primeira_modificacao&"/"&ano_dataf_primeira_modificacao
dataf_modificada = dateadd("d", -1, dataf_segunda_modificacao)

terei então a data final que preciso, ou seja, exatamente com o último dia do mês, independente se o mês terminar com 28, 29, 30 ou 31 dias... mas como fazer isso tudo diretamente dentro da própria query?

 

OBS.: não testei os códigos acima, postei aqui apenas como exemplo lógico... mais para demonstrar o que preciso, que é basicamente, modificar os resultados dos campos data dentro da própria query para usá-los na cláusula do between, ok?

 

Alguém se habilita?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou me basear que voce tenha datav1 e datav2, porque nao tem como ter 2 datas so numa variável datav.

 

where datai between datav1 and datav2
and dataf between datav1 and datav2

 

desse jeito voce formata datav1 e datav2 corretamente no asp e manda para a query já pronta.

 

o ideal seria voce armazenar datai e dataf tb em forma de anomes, tipo, se você tem o registro 12/03/2011, armazena como 201103. Assim, sua consulta ficará com melhor desempenho porque não estará formatando nenhum campo na hora de criar a query.

 

De qualquer forma, sua dúvida é de SQL e não de ASP, assim esse tópico deveria estar em SQL e não aqui no ASP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não esqueça , que as datas devem estar no formato de datsa, caso não esteja converta-as antes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço o auxílio...

 

Será que algum moderador poderia mover meu tópico para o fórum de SQL?

 

Desculpa, mas acho que me lançaram no fórum incorreto... o ideal seria SQL e não access, ok? Algum modera salva eu aqui?

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.