Fechas erroneas en Oracle 8i Release 8.1.7.0.0

En un campo de tipo fecha encuentro fechas como la siguiente:
02/32/66
al aplicar una mascara('dd/mm/yyyy')resulta:
¿00/00/0000
cómo puede estar esa fecha en el motor? ¿Por qué Oracle permite eso?
¿Cómo se interpreta esa fecha?

1 respuesta

Respuesta
1
Si la información que veo es correcta hay un error con el mes, ya que te sale 32, en caso de ser día tampoco es válido ya que no existe un día 32.
Es probable que no estés aplicando bien la máscara de fecha, o que la función no acepte el año.
Te explico cuando utilizas yyyy para el año el 66 es interpretado como 1966, pero si utilizas rrrr entonces es 2066.
Observa bien cual es el valor de la variable de ambiente NLS_DATE_FORMAT, para que sepas donde esta el mes y el día.
Lo que yo observo como más probable es que no estás usando bien la función.
Te coloco la sintaxis de to_date y to_char.
to_date(campo,'dd/mm/yyyy')
to_char(campo,'dd/mm/yyyy')
Gracias por su pronta respuesta, le envío el select sin mascara, para que el error sea más claro, la fecha la saca el motor así no más:
SQL> select *
2 from prueba_p;
FECHA
--------
12/12/02
02/32/66
aplicando la mascara tengo:
SQL> select to_char(FECHA,'dd/mm/yyyy')
2 from prueba_p;
TO_CHAR(FE
----------
12/12/2002
00/00/0000
Si ve yo no entiendo por que esa fecha (02/32/66) esta en el campo
Hombre le agradezco de antemano su respuesta
la variable nls_date_format=DD-MON-RR
Sin duda esto es un error. Lo más probable es que esto sea un Bug de BD, ya que el manejador no debería permitir grabar un día o mes que tenga valor 32 ya que eso es imposible.
No olvides reportarlo a Soporte Oracle para que te indiquen que patch debes aplicarle a la BD.
Lo que yo te recomiendo para solucionar de manera rápida tu caso es que le hagas un UPDATE al registro con una fecha correcta y pruebes de nuevo; sin dida esto solucionará tu problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas