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:
-
MM
cũng khớp vớiMON
vàMONTH
; -
MON
khớp vớiMONTH
(và ngược lại); -
RR
khớ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.