[firebase-br] SQL Complexa ainda mais (Solução)

Eduardo Jedliczka edujed em gmail.com
Qui Jul 1 21:57:46 -03 2010


Não sei se entendi o que voce quer, (se tiver data final, todos os
lançamentos compreendidos naquele mês, senão, os lançamentos
anteriores ao mês informado)

Mas não seria mais fácil passar, ao invés de mês e ano, o dia e fim do
período e fazer algo do tipo:

select x.* from teste x
where x.matricula = :matricula
and (
 (x.data_final is not null and x.data_inicio >= :data_inicio_mes and
x.data_final <= :data_fiim_mes)
or (x.data_final is null and x.data_inicio<= :data_fim_mes))

mas, se não dá para alterar os parâmetros, dá para montar a
data_inicio com algo como: CAST('01.'||:mes||'.'||:ano as date)

se usar o Firebird 1.x  a data final:(numa SP)

DATA_FIM_MES := DATAINICIO + 32;
DATA_FIM_MES:= DATA_FIM_MES- extract(DAY from DATA_FIM_MES);

ou

(CAST('01.'||:mes||'.'||:ano as date) + 32) - extract(DAY from
(CAST('01.'||:mes||'.'||:ano as date) + 32)

Firebird 2.x é só usar a INCMonth na data inicial e subtrair 1.

abraço

PS: eu estou longe do FB, e estou escrevendo o select de cabeça,
portanto talvez tenha algum erro de sintaxe.

Eduardo Jedliczka

Em 30 de junho de 2010 14:27, Hélio Oliveira <hpensador em gmail.com> escreveu:
> Obrigado a todos pelas dicas sugestões...
> Abaixo uma solução que encontrei a partir da dica do colega Alyson.
>
> select x.*
> from teste x
> where x.matricula = :matricula
>  and (((:ano || :mes) between (extract(year from x.data_inicio) ||
> extract(month from x.data_inicio))
>  and (extract(year from x.data_final) || extract(month from x.data_final))
>  and x.data_final is not null)
>   or ((extract(year from x.data_inicio) || extract(month from
> x.data_inicio)) <= (:ano || :mes)
>  and x.data_final is null))
>
> --
> []'s,
>
> Hélio Oliveira
> Analista de Sistemas
> Delphi Developer
> http://hpensador.blogspot.com/
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista