FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Consulta de fecha con hora, como?
Que tal a todos...
Mi problema es el siguiente, estoy usando Firebird 2.1 Dialecto 1 (la DB fue creada inicialmente asi) tengo lo siguiente: Una tabla FACTURA con dos campos FECHA tipo Date y HORA tipo VARCHAR(13) ya que el dialecto 1 no soporta el tipo TIME. El formato de la hora es del tipo 00:00 AM Ej. "12:56 PM" asi grabo el campo hora en la tabla. Quiero hacer una consulta entre fechas que involucre la hora. Ej. del 03/04/2010 a las 12:34 AM hasta el 06/04/2010 04:12 PM y no me trae ningun dato. estoy usando el siguiente query: select sum(b.montoneto), count(b.numerofactura) from factura b where b.condicionfactura = 'CONTADO' and b.estadofactura = 'PAGADA' and b.fechafactura >= :FechaInicial and b.fechafactura <= :FechaFinal and b.horafactura >= :HoraInicio and b.HoraFactura <= :HoraFin Y le mando la hora y la fecha desde Delphi 2007 en el formato que especifique arriba. Para un solo dia me funciona y hasta de un dia para otro, pero si pase de dos dias la consulta no trae nada. Una mano por favor... Gracias |
#2
|
||||
|
||||
¿podrías poner cómo lo estas haciendo el delphi?
__________________
|
#4
|
||||
|
||||
Debes usar también campos date para guardar la hora, te será mucho más cómodo, tan sólo que "desprecias" la fecha y te quedas con lo que te interesa, la hora.
Ten en cuenta que los campos date guardan un número tal como así: 38925,12569874 la parte entera, 38925, es la fecha contando desde el 31.12.1899 (creo recordar) y la parte decimal es la hora. Si lo guardar como un varchar te estás complicando mucho.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
|||
|
|||
Se me ocurre que podes probar algo como esto
Fec_Ini := QuotedStr(FormatDateTime('dd/mm/yyyy', Fec_Ini)+' 00:00:00'); Fec_Fin := QuotedStr(FormatDateTime('dd/mm/yyyy', Fec_Fin)+' 23:59:59'); Donde te quedaria con la fecha de hoy por ejemplo fechafactura >= '11/03/2010 00:00:00' fechafactura <= '11/03/2010 23:59:59' Incluso creo que deberia ser entre 00:00:01 y las 00:00:00 pero eso es algo que cada uno maneja y lo ve como quiere O hacer directamente esto Fec_Ini := QuotedStr(FormatDateTime('dd/mm/yyyy hh:mm:ss', Fec_Ini)); Fec_Fin := QuotedStr(FormatDateTime('dd/mm/yyyy hh:mm:ss', Fec_Fin)); Última edición por elarys fecha: 11-03-2010 a las 19:53:56. |
#6
|
|||
|
|||
Tienes un problema grave:
ya que la hora está siendo grabada como texto y en formato am/pm (para remate), resulta imposible comparar rangos de horas que crucen las 12:00 m, ejemplo: 06:33 AM es menor que 04:00 PM pero '06:33 AM' es MAYOR que '04:00 PM', ¿Como puede ser esto? Muy sencillo: se están comparando textos (que representan horas pero siguen siendo literales), es decir '0' es igual a '0', pero '06' es MAYOR que '04', sin importar lo que siga a continuación ni el significado que tenga para nosotros. Soluciones: 1.- Si tienes los fuentes del sistema en uso: (la más fácil) 1.1.- Cambia el formato de la hora grabada a 24 horas (04:00 PM = 16:00) 1.2.- Diseña una aplicación que recorra la tabla y actualice el campo con el nuevo formato. 1.3.- Usa el campo Hora para la consulta (en todo caso deberas hacer 3 clausulas): WHERE ... AND ((Fecha = :FechaInicial) AND (Hora >= :HoraInicial)) AND ((Fecha > :FechaInicial) AND (Fecha < :FechaFinal)) AND ((Fecha = :FechaFinal) AND (Hora<= :HoraFinal)) 2.- No tienes los fuentes del sistema en uso: (la menos fácil) 2.1.- Agrega un campo (a la tabla Facturas claro) tipo VARCHAR (05) y lo llamas Hora24 o algo así. 2.2.- Crea un Trigger para la tabla "Facturas" que actualice dicho campo con la hora en formato 24H basado en el campo hora que se usa actualmente. 2.3.- Usa el nuevo campo Hora24 para la consulta (en todo caso deberas hacer 3 clausulas): WHERE ... AND ((Fecha = :FechaInicial) AND (Hora24 >= :HoraInicial)) AND ((Fecha > :FechaInicial) AND (Fecha < :FechaFinal)) AND ((Fecha = :FechaFinal) AND (Hora24<= :HoraFinal)) Bueno, me cansé. Suerte... |
#7
|
|||
|
|||
Con el metodo de elarys resolvi la situacion... Gracias a todos!!!
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Consulta SQL con fecha y hora | vpepen | SQL | 0 | 10-12-2009 18:11:13 |
Filtrar consulta por fecha y hora | Alejandrina | SQL | 4 | 16-06-2008 09:18:10 |
Consulta MySQL con fecha y hora | Adrian Murua | SQL | 10 | 19-11-2007 06:32:08 |
Juntar fecha y hora para consulta SQL | Iuconlas | SQL | 6 | 21-02-2007 13:16:40 |
Error en consulta con fecha y hora. | Tecnic2 | SQL | 10 | 01-10-2005 02:35:25 |
|