Ver Mensaje Individual
  #6  
Antiguo 11-03-2010
Xcalibur Xcalibur is offline
Registrado
 
Registrado: ene 2008
Posts: 5
Reputación: 0
Xcalibur Va por buen camino
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...
Responder Con Cita