Hola a tod@s.
El otro día digamos que "me llamaron la atención" (en plan coloquial) sobre la forma que tenía de comparar fechas encerrádolas entre comillas y que era mejor utilizar
ParamByName en su lugar.
Bien, hasta ahora el método de encerrar la fecha entre comillas nunca me habia dado problemas (Delphi-7, Zeos-6 y MySql-5) y pensaba que era lo correcto (mejor con un ejemplo)
Sacar los datos entre las 21:00:00 de ayer y las 00:00:00 horas de mañana para las horas "en punto"
Mi forma
devuelve 26 filas
Código SQL
[-]
SQL.Add( ' WHERE (fecha="2008-11-23" AND DATE_FORMAT(hora, "%H:%i:%s")="21:00:00")' );
SQL.Add( ' OR (fecha="2008-11-24" AND DATE_FORMAT(hora, "%i:%s")="00:00")' );
SQL.Add( ' OR (fecha="2008-11-25" AND DATE_FORMAT(hora, "%H:%i:%s")="00:00:00")' );
Con ParamByName devuelve una sola fila
Código SQL
[-]
SQL.Add( ' WHERE (fecha = :FechaAyer AND DATE_FORMAT(hora, "%H:%i:%s")="21:00:00")' );
SQL.Add( ' OR (fecha = :FechaHoy AND DATE_FORMAT(hora, "%%i:%s")="00:00")' );
SQL.Add( ' OR (fecha = :FechaMana AND DATE_FORMAT(hora, "%H:%i:%s")="00:00:00")' );
SQL.Add( ' ORDER BY psensor.clave' );
ParamByName('FechaAyer').AsDate := MI_FECHA-1;
ParamByName('FechaHoy').AsDate := MI_FECHA;
ParamByName('FechaMana').AsDate := MI_FECHA+1;
¿No se utiliza asi?
Gracias anticipadas
Salvica