sql >> Base de Datos >  >> RDS >> Oracle

problema con la función to_date con sysdate

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 :)