Sie führen in beiden Versionen mehrere implizite Datumskonvertierungen durch. Dies:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
entspricht:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
während bei der zweiten Abfrage eine davon durch ein bestimmtes Format ersetzt wird. Es sieht aus wie Ihr Standardformat - das Sie, glaube ich, in den Toad-Einstellungen festlegen können, ohne die Registrierung direkt zu ändern. Es ist nicht klar, ob Sie überhaupt etwas modifizieren, das mit Toad zu tun hat - es ist DD-MON-RR
, wie durch Einfügen in diese Abfragen gezeigt:
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 )
Sie können in diese SQL-Fiddle
sehen dass in der ersten Version das Datum als String mit dem Jahr als 49
erscheint statt 1949
, und das wird dann interpretiert - durch den RR
Maske - als 2049
, was das erwartete Verhalten ist.
Kurzversion:Verlassen Sie sich niemals auf implizite Datumskonvertierungen oder die NLS-Datumsformatmaske.