Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Oracle

Respuesta
 
Herramientas Desplegado
Antiguo 16-ago-2007, 03:42   #1 (permalink)
programadornet ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 160
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
programadornet está desconectado   Responder Citando
Antiguo 16-ago-2007, 09:08   #2 (permalink)
Colaborador
Linterns tiene algunos puntos positivos de karma
 
Avatar de Linterns
 
Fecha de Ingreso: noviembre-2002
Mensajes: 2.803
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
** ***
Linterns está desconectado   Responder Citando
Respuesta

Calificación: Calificación de Tema: 1 votos, 2,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 12:30.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93