Stai eseguendo più conversioni di date implicite in entrambe le versioni. Questo:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
equivale a:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
mentre la seconda query ne ha una di quelle sostituite con un formato specifico. Sembra il tuo formato predefinito - che puoi impostare, credo, nelle preferenze di Toad senza modificare direttamente il registro; non è chiaro se stai anche modificando qualcosa relativo a Toad - è DD-MON-RR
, come mostrato collegandolo a queste query:
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 )
Puoi vedere in questo SQL Fiddle
che nella prima versione la data appare come una stringa con l'anno come 49
anziché 1949
, e questo viene quindi interpretato - dal RR
maschera - come 2049
, che è il comportamento previsto.
Versione breve:non fare mai affidamento sulle conversioni di data implicite o sulla maschera del formato della data NLS.