Quy tắc chuyển đổi chuỗi thành ngày cho phép các quy tắc định dạng bổ sung (mà không áp dụng bất kỳ công cụ sửa đổi nào khác). Vì vậy:
-
MMcũng khớp vớiMONvàMONTH; -
MONkhớp vớiMONTH(và ngược lại); -
RRkhớp vớiRRRR; và - Dấu câu là tùy chọn.
Vì vậy:
SELECT TO_DATE( '10AUGUST2016', 'DD-MM-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUGUST2016', 'DD-MON-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUGUST2016', 'DD-MONTH-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016', 'DD-MM-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016', 'DD-MON-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016', 'DD-MONTH-RR' ) FROM DUAL;
Tất cả tạo ra ngày 2016-08-10T00:00:00 .
Bạn có thể ngăn điều này bằng cách sử dụng FX mô hình định dạng
Sau đó:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Cung cấp:ORA-01858: a non-numeric character was found where a numeric was expected và sẽ chỉ khớp khi tìm thấy một mẫu khớp chính xác (mặc dù RR sẽ vẫn khớp với RRRR ).
Có, oracle đang ngầm sử dụng TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) để thực hiện chuyển đổi.
Nếu bạn sử dụng:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Sau đó, chèn của bạn sẽ không thành công.