Ver Mensaje Individual
  #14  
Antiguo 02-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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 .

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
Responder Con Cita