Du laver flere implicitte datokonverteringer i begge versioner. Dette:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
svarer til:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
hvorimod den anden forespørgsel har en af dem erstattet med et specifikt format. Det ligner dit standardformat - som du kan indstille, tror jeg, i Toad-præferencerne uden at ændre registreringsdatabasen direkte; det er ikke klart, om du overhovedet ændrer noget relateret til Toad - er DD-MON-RR
, som vist ved at tilslutte det til disse forespørgsler:
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 )
Du kan se i denne SQL Fiddle
at i den første version vises datoen som en streng med året som 49
i stedet for 1949
, og det fortolkes så - af RR
maske - som 2049
, som er den forventede adfærd.
Kort version:Stol aldrig på implicitte datokonverteringer eller NLS-datoformatmasken.