Quiero explicar por qué obtiene resultados diferentes.
Ver este sqlfiddle
Como ya se dijo, sysdate se ve como DATE
escriba y está haciendo una conversión implícita cuando
select to_date(sysdate, format) from dual;
porque el primer parámetro de to_date debe ser de tipo varchar, el sistema lo hace:
select to_date(to_char(sysdate), format) from dual;
porque su formato de fecha implícito es 'DD-MON-YY'
, su consulta entra en:
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;
el segundo to_date, porque yyyy
es un formato completo de miles de años, va a '01-JAN-0013' que es 13AD y probablemente sea DOMINGO :)