Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Problem mit to_date-Funktion mit sysdate

Ich möchte erklären, warum Sie unterschiedliche Ergebnisse erhalten.

Siehe diese sqlfiddle

Wie bereits gesagt, wird sysdate als DATE angesehen type und Sie führen eine implizite Konvertierung durch, wenn

select to_date(sysdate, format) from dual;

weil der erste Parameter von to_date vom Typ varchar sein sollte, tut das System:

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

weil Ihr implizites Datumsformat 'DD-MON-YY' ist , Ihre Abfrage geht in:

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;

das zweite to_date, weil yyyy ist ein vollständiges Jahrtausendformat, geht bis '01-JAN-0013', was 13 n. Chr. ist und wahrscheinlich SONNTAG ist :)