V obou verzích provádíte několik implicitních převodů data. Toto:
SELECT to_date(to_char(to_date('01-FEB-1949'))) FROM DUAL;
je ekvivalentní:
SELECT to_date(to_char(to_date('01-FEB-1949', <NLS_DATE_FORMAT>),
<NLS_DATE_FORMAT>, <NLS_DATE_FORMAT>)) FROM DUAL;
zatímco druhý dotaz má jeden z dotazů nahrazený specifickým formátem. Vypadá to jako váš výchozí formát – který, věřím, můžete nastavit v předvolbách Toad, aniž byste museli přímo upravovat registr; není jasné, jestli vůbec upravujete něco, co souvisí s Toad - je DD-MON-RR
, jak ukazuje zapojení do těchto dotazů:
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 )
Můžete to vidět v této SQL Fiddle
že v první verzi se datum zobrazuje jako řetězec s rokem jako 49
spíše než 1949
, a to je pak interpretováno - pomocí RR
maska - jako 2049
, což je očekávané chování.
Krátká verze:nikdy se nespoléhejte na implicitní převody data nebo masku formátu data NLS.