Oracle
 sql >> Base de données >  >> RDS >> Oracle

problème avec la fonction to_date avec sysdate

Je veux expliquer pourquoi vous obtenez des résultats différents.

Voir ce sqlfiddle

Comme il a déjà été dit, sysdate est vu comme DATE type et vous effectuez une conversion implicite lorsque

select to_date(sysdate, format) from dual;

car le premier paramètre de to_date doit être de type varchar, le système fait :

select to_date(to_char(sysdate), format) from dual;

car votre format de date implicite est 'DD-MON-YY' , votre requête va dans :

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;

le deuxième to_date, car yyyy est un format complet de milliers d'années, va à '01-JAN-0013' qui est 13AD et probablement DIMANCHE :)