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.