Правите множество неявни преобразувания на дати и в двете версии. Това:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
е еквивалентно на:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
докато втората заявка има един от тези, заменен с конкретен формат. Изглежда като вашия формат по подразбиране - който можете да зададете, според мен, в предпочитанията на Toad, без да променяте директно регистъра; не е ясно дали изобщо променяте нещо, свързано с Toad - е DD-MON-RR
, както е показано чрез включване на това в тези заявки:
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 )
Можете да видите в този SQL Fiddle
че в първата версия датата се появява като низ с година като 49
вместо 1949
и след това се интерпретира - от RR
маска - като 2049
, което е очакваното поведение.
Кратка версия:никога не разчитайте на имплицитни преобразувания на дата или на маската за формат на дата NLS.