sql >> Base de Datos >  >> RDS >> Oracle

Diferentes fechas Oracle 11g con TOAD

Estás haciendo múltiples conversiones de fecha implícitas en ambas versiones. esto:

SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL; 

es equivalente a:

SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
    <NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;

mientras que la segunda consulta tiene uno de esos reemplazados con un formato específico. Parece su formato predeterminado, que puede configurar, creo, en las preferencias de Toad sin modificar el registro directamente; no está claro si incluso está modificando algo relacionado con Toad:es DD-MON-RR , como se muestra al conectar eso en estas consultas:

SELECT to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
        'DD-MON-RR'),'DD-MON-RR') AS date1,
    to_date(to_char(to_date('01-FEB-1949','DD-MON-RR'),
        'dd-MON-yyyy'),'DD-MON-RR') AS date2 FROM DUAL;

DATE1                            DATE2
February, 01 2049 00:00:00+0000  February, 01 1949 00:00:00+0000

(SQL Fiddle )

Puedes ver en este SQL Fiddle que en la primera versión, la fecha aparece como una cadena con el año como 49 en lugar de 1949 , y eso luego es interpretado - por el RR máscara - como 2049 , que es el comportamiento esperado.

Versión corta:nunca confíe en conversiones de fecha implícitas o en la máscara de formato de fecha NLS.