Tôi muốn giải thích lý do tại sao bạn nhận được các kết quả khác nhau.
Xem sqlfiddle này
Như đã nói, sysdate được xem là DATE
nhập và bạn đang thực hiện một chuyển đổi ngầm khi
select to_date(sysdate, format) from dual;
bởi vì tham số đầu tiên của to_date nên là kiểu varchar mà hệ thống thực hiện:
select to_date(to_char(sysdate), format) from dual;
bởi vì định dạng ngày ngầm định của bạn là 'DD-MON-YY'
, truy vấn của bạn chuyển thành:
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;
ngày_năm thứ hai, bởi vì yyyy
là định dạng hàng nghìn năm đầy đủ, chuyển đến '01 -JAN-0013 'là 13AD và có thể là CHỦ NHẬT :)