Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Filtrar consulta por fecha y hora (https://www.clubdelphi.com/foros/showthread.php?t=57406)

Alejandrina 13-06-2008 21:18:58

Filtrar consulta por fecha y hora
 
Hola a todos,
Resulta que tengo un campo llamado fecha tipo data en una tabla en interbase, y necesito hacer una consulta que me permita seleccionar los
registros que estan en determinado rango de fechas pero que tambien me incluya la hora, es decir que yo pueda hacer algo como esto:
where e.fecha between '06/03/2008 06:00:00 a.m.' and '06/03/2008 02:00:00 p.m.'
Es posible? como podria hacerlo?:confused:

Gracias por la ayuda que me puedan brindar.

santiago14 13-06-2008 21:32:24

filtrar por fechas y horas
 
Una buena respuesta a esto podría ser:

Código SQL [-]
Select...
From ...
Where fecha BETWEEN :fecha1 AND :fecha2

Antes de hacer Open de la consulta en cuestión tendrías que poner unos ParamByName

Código Delphi [-]
      
...
paramByName('fecha1').asDateTime:=fecha1;
paramByName('fecha2').asDateTime:=fecha2; 
try
  open;
except
  raise;
end;

En la BD tu campo "fecha" debería declararse de tipo timestamp para que pueda soportar hora y fecha.

fecha1 y fecha2 son variables tipo dateTime donde pones el tiempo inicial y final para el filtro.
Espero que te ayude.

Alejandrina 13-06-2008 22:12:05

filtrar por fechas y horas
 
Gracias...
Bueno te cuento que justamente asi estoy realizando la consulta coloque una fecha exacta como ejemplo de como se estan almacenando los datos de la fecha en la tabla. La cosa es que cuando realizo la consulta de esta forma:

Código SQL [-]select e.fecha,e.usuario,e.documento,o.maquina,e.referencia,o.descripcion,e.observaciones2
from estadisticas e
inner join ordendescripcion o on o.orden=e.documento
where e.fecha between '06/03/2008' and '06/04/2008'
order by e.fecha



la consulta me arroja resultados, pero cuando lo hago de esta otra forma la cual seria la ideal para mi:

Código SQL [-]select e.fecha,e.usuario,e.documento,o.maquina,e.referencia,o.descripcion,e.observaciones2
from estadisticas e
inner join ordendescripcion o on o.orden=e.documento
where e.fecha between '06/03/2008 06:00:00 a.m.' and '06/03/2008 02:00:00 p.m.'order by e.fecha



la consulta no me arroja el siguiente error
"Invalid modify request
conversion error from string "06/03/2008 02:00:00 p.m.""

santiago14 13-06-2008 22:59:51

Código SQL [-]
select e.fecha,e.usuario,e.documento,o.maquina,e.referencia,o.descripcion,e.observaciones2
from estadisticas e inner join ordendescripcion o on o.orden=e.documento
where e.fecha between '06/03/2008' and '06/04/2008'
order by e.fecha

la consulta me arroja resultados, pero cuando lo hago de esta otra forma la cual seria la ideal para mi:

Código SQL [-]
select e.fecha,e.usuario,e.documento,o.maquina,e.referencia,o.descripcion,e.observaciones2
from estadisticas e inner join ordendescripcion o on o.orden=e.documento
where e.fecha between '06/03/2008 06:00:00 a.m.' and '06/03/2008 02:00:00 p.m.'order by e.fecha

la consulta no me arroja el siguiente error

"Invalid modify request
conversion error from string "06/03/2008 02:00:00 p.m.""[/quote]



Bueno, veamos:
Yo pondría en un formulario dos componentes DateTimePicker, uno con la fecha y otro con la hora, luego como la fecha es la parte entera y la hora es la parte decimal de un double, los sumamos.

De ahi lo guardamos en una variable tipo TDateTime y la pasamos a la consulta de la manera que indico la respuesta anterior. Con eso, segurament no te saldrá el error de conversión pues delphi y/o interbase se encargan de la transformación.
Yo lo he hecho muchas veces como lo comento y nunca me dió un error de conversión. Si aparecía cuando le pasaba los valores directamente.
Puedo decir al respecto que la fecha en interbase tiene la forma "mm/dd/aaaa" y la hora "hh:mm:ss" pero creo que se complica un poco cuando es am o pm.

El error quiere decir que interbase no puede transformar el string para operar. Lo mejor sería no pasarle las cosas por valor sino en variables para que las funciones internas se encarguen de las transformaciones.

Igual para que pueda ver con mas claridad lo que hiciste y poder probarlo si deseas podrías publicar la parte de código que no funciona, lo pruebo y veo que si puedo solucionarlo.

Saludos.

kuan-yiu 16-06-2008 09:18:10

El error que te da es por el formato de la fecha y hora que le pasas, es mejor definir el entorno de fechas como variables y rellenarlas con un componente que no te de problemas.
El componente DateTimePicker tiene una propiedad llamada "DateTime" que devuelve la fecha y hora seleccionada en un formato válido.


La franja horaria es GMT +2. Ahora son las 14:07:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi