Bueno, se supone que todo mes es menor o igual que 12 y mayor o gual que 1, por lo que esos dos condicionales sobrarían.
Lo de la evaluación previa, creo que podemos hacerla en la misma consulta comparando los parámetros en sí:
Código SQL
[-]
select * from personas
where
(
(100*:mi + :di < 100*:mf + :df) and
(
(100*:mi + :di < 100*extract(month from fecha) + extract(day from fecha)) and
(100*extract(month from fecha) + extract(day from fecha) < 100*:mf + :df)
)
)
or
(
(100*:mi + :di > 100*:mf + :df) and
(
(100*:mi + :di < 100*extract(month from fecha) + extract(day from fecha)) or
(100*extract(month from fecha) + extract(day from fecha) < 100*:mf + :df)
)
)
Un ejemplo de uso:
Código Delphi
[-]
var
mi, mf, di, df: Integer;
begin
Query1.ParamByName('mi').AsInteger := MonthOf(DateTimePickerInicial.Date);
Query1.ParamByName('di').AsInteger := DayOf(DateTimePickerInicial.Date);
Query1.ParamByName('mf').AsInteger := MonthOf(DateTimePickerFinal.Date);
Query1.ParamByName('df').AsInteger := DayOf(DateTimePickerFinal.Date);
Query1.Open;
end;
Conste que puse 100 para que no se extrañen
![Stick Out Tongue](http://www.clubdelphi.com/foros/images/smilies/tongue.gif)
.
No la he probado del todo pero creo que funciona salvo porque me falta el caso de que las fechas inicial y final sean iguales, pero no debe ser mayor problema.
// Saludos