Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

problema com a função to_date com sysdate


Eu quero explicar por que você obtém resultados diferentes.

Veja este sqlfiddle

Como já foi dito, sysdate é visto como DATE tipo e você está fazendo uma conversão implícita quando
select to_date(sysdate, format) from dual;

porque o primeiro parâmetro de to_date deve ser do tipo varchar que o sistema faz:
select to_date(to_char(sysdate), format) from dual;

porque seu formato de data implícito é 'DD-MON-YY' , sua consulta vai para:
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;

o segundo to_date, porque yyyy é um formato completo de milhares de anos, vai para '01-JAN-0013' que é 13AD e provavelmente é DOMINGO :)