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