W obu wersjach wykonujesz wiele niejawnych konwersji dat. To:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
jest równoważne z:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
podczas gdy drugie zapytanie ma jedno z nich zastąpione określonym formatem. Wygląda na twój domyślny format - który możesz ustawić, jak sądzę, w preferencjach Toad bez bezpośredniej modyfikacji rejestru; nie jest jasne, czy modyfikujesz coś związanego z ropuchą - jest to DD-MON-RR
, jak pokazano, podłączając to do tych zapytań:
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 )
Możesz zobaczyć te SQL Fiddle
że w pierwszej wersji data pojawia się jako ciąg z rokiem jako 49
zamiast 1949
, a to jest następnie interpretowane - przez RR
maska - jako 2049
, czyli oczekiwane zachowanie.
Wersja skrócona:nigdy nie polegaj na niejawnej konwersji daty lub masce formatu daty NLS.