La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1357 - DELPHI
Autor:  Victor Manuel Morales Gabriel
¿Como puedo condicionar en un SQL un campo tipo fecha dentro de la clausula Where?

  Respuesta:  CANDY Montoya
hola yo uso el mysql con delphi y cuando uso un mytable y quiero hacer un filtro sql con fecha lo hafgo asi
mytable1.filtersql:='fecha=20060502' ;
porque lei un poco de como era el formato que el mysql entendia y era asi yyyymmdd

  Respuesta:  Federico Gordillo
Otra forma de hacerlo, esto te lo escribo porque en un tiempo lo hacia de forma similar a como te menciono Jose pero no siempre buscaba bien. Se mareaba con las fechas y no tengo la menor idea del porque capaz era mi maquina. Por eso yo ahora lo hago de la siguiente manera
QClientes.active:=false;
QClientes.sql.clear;
QClientes.sql.add(´select *´);
QClientes.sql.add(´From "Clientes.db"´);
QClientes.sql.add(´Where (Vencimiento > :fecha)´);
QClientes.sql.add(´Order By Nombre´);
QClientes.Params.ParamByName.(´fecha´).ParamType:=ptInput;
QClientes.Params.ParamByName(´fecha´).DataType := ftDateTime;
QClientes.ParambyName(´fecha´).asdateTime:=date;
QClientes.active:=true;
asi nunca tuve problemas. No se si a esta altura del partido te sirve esta informacion pero es para que si lo queres lo tengas presente por las dudas.


  Respuesta:  José Oronas
Asumo que usas un tQuery para correr el código Sql.
De acuerdo a mi experiencia en esto que no es mucha, la fecha va entre comillas y en formato mm/dd/yyyy o al menos yo no encontre la forma de que lo tomara de otra manera (y no me procupe demasiado).
Disculpa, si se desliza un error aparentemente esta bien pero no tengo delphi a mano para chequear la sintaxis

Query1.Active := False ;
With Query1.Sql Do
Begin
Clear ;
Add(´SELECT DISTINCT Nombre, Domicilo, Tel´);
Add(´FROM "Agenda.DB"´);
Add(´WHERE´);
Add(´(FNac > ´+#39+FormatDateTime(´mm/dd/yyyy´,Fecha)+#39+´)´);
// Fecha : tDatetime
Add(´ORDER BY Nombre´);
End ;
Query1.Active := True ;

Si lo que necesitas es condicionar el dia, mes o año podes usar la funcion EXTRACT()


Si en cambio necesitas por ejempo para buscar cumpleaños del dia 15 de enero te quedaría algo asi :

Query1.Active := False ;
With Query1.Sql Do
Begin
Clear ;
Add(´SELECT DISTINCT Nombre, Domicilo, Tel´);
Add(´FROM "Agenda.DB"´);
Add(´WHERE´);
Add(´(SELECT EXTRACT(Day FROM FNac)= 15)´);
Add(´AND (SELECT EXTRACT(Month FROM FNac)= 1)´);
Add(´ORDER BY Nombre´);
End ;
Query1.Active := True ;

Espero que te sea util.

Saludos ..