Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Mejor método para realizar el between con fechas

Estas en el tema de Mejor método para realizar el between con fechas en el foro de Oracle en Foros del Web. Hola, Detecté una fuente de potenciales incidencias que me sorprendió al principio, debido al uso del between con fechas. Y es que el between coge ...
  #1 (permalink)  
Antiguo 16/08/2007, 03:42
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años, 7 meses
Puntos: 1
Mejor método para realizar el between con fechas

Hola,

Detecté una fuente de potenciales incidencias que me sorprendió al principio, debido al uso del between con fechas.

Y es que el between coge los extremos (lo que todos pensamos de antemano), pero si no nos damos cuenta en la hora que tengan las fechas puede ser que una fecha se quede fuera de rango.

Por ejemplo, imaginad que en una base de datos tenéis guardadas dos fechas sin hora (fecha 1 y fecha 2) y queréis realizar una consulta de los registros cuyas dos fechas incluyan en el intervalo a la fecha actual, y hacéis:

where sysdate between fecha1 and fecha2

Pues como el sysdate lleva la hora, y las fechas no (llevan la hora 0:00:00 por defecto de Oracle), en los extremos, por ejemplo en el día que coincida con fecha2, no se obtendrá registro (y tendremos un intervalo abierto y no cerrado del between).

Para solucionarlo he pensado lo siguiente:

Realizar un to_char, y después un to_date sobre el resultado del to_char, de cada fecha, para eliminar las posibles horas que cada una pudiera tener guardada. (es decir, to_char con formato 'DD-MM-YYYY', por ejemplo, y luego vuelta a fecha).

¿Alguien se ha encontrado con este problema y tiene un mejor modo o simplemente distinto de solucionarlo?

Saludos
  #2 (permalink)  
Antiguo 16/08/2007, 09:08
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 11 meses
Puntos: 11
Re: Mejor método para realizar el between con fechas

efectivamente asi que lo que dbes hacer si solo vas a tomar las fechas y no las horas es truncar dichos datos:

Código PHP:
trunc date, [ format ] ) 
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:18.