Chcę wyjaśnić, dlaczego otrzymujesz różne wyniki.
Zobacz ten sqlfiddle
Jak już zostało powiedziane, sysdate jest postrzegane jako DATE
wpisz i wykonujesz niejawną konwersję, gdy
select to_date(sysdate, format) from dual;
ponieważ pierwszy parametr to_date powinien być typu varchar, co system robi:
select to_date(to_char(sysdate), format) from dual;
ponieważ domyślny format daty to 'DD-MON-YY'
, Twoje zapytanie trafia do:
SELECT TO_CHAR(to_date('01-JAN-13', 'DD-MON-yy'), 'DAY'),
TO_CHAR(to_date('01-JAN-13', 'DD-MON-yyyy'), 'DAY'),
TO_CHAR(to_date('01-JAN-13', 'DD-MON-rr'), 'DAY'),
TO_CHAR(to_date('01-JAN-13', 'DD-MON-rrrr'), 'DAY')
FROM dual;
drugi jak do tej pory, ponieważ yyyy
to pełny format tysięcy lat, idzie do '01-JAN-0013', czyli 13AD i prawdopodobnie NIEDZIELA :)