É tudo questão de lógica...
Repare o seu SQL (substituindo os valores dos parametros):

select * from paroquiano
where (extract(day from data_Nascimento)>=25 and extract(day from
data_Nascimento)<=3) .....

Você quer pegar o registro que o dia seja >= a 25 mas que seja <= 3
Impossível....
Bom, mas uma maneira de resolver isso é através da matemática!
Tente assim:

select * from paroquiano
where ((extract(month from data_nascimento)*100)+(extract(day from 
data_nascimento))) >= ((:MesIni * 100) + :DiaIni)
and ((extract(month from data_nascimento)*100)+(extract(day from 
data_nascimento))) <= ((:MesFim * 100) + :DiaFim)

Existem outras maneiras, mas acho que essa é a mais "curta"...

[]'s
Ezequiel


ricardo_sx escreveu:
> 
> 
> Amigos, boa noite. Estou tentando fazer uma consulta onde retorne,
> através de um período informado, os registros contido na tabela
> paroquiano.
> Eu tenho a seguinte linha que atende em parte o meu problema:
> 
> select * from paroquiano
> where (extract(day from data_Nascimento)>=:DiaIni and extract(day from
> data_Nascimento)<=:DiaFim) and extract(month from data_Nascimento)
> =:MesIni; //poderia incluir até and extract(month from data_Nascimento)
> =:MesFim que não vai fazer efeito
> 
> Através dessa instrução, caso eu digite 01/04 a 31/04, eu vou ter o
> retorno desejado, porém, se eu digitar 25/04 a 03/05 não vou conseguir
> resultado.
> 
> Gostaria de saber se alguém tem uma solução pra esse problema?
> Lembrando que utilizo interbase 6.0
> 
> PS: procurei mensagens anteriores sobre esse assunto e, as dicas
> informadas, não fizeram efeito pra mim. Peguei todas e testei na hora
> no interbase e nada de gerar o retorno desejado.
> 
> 

Responder a