Aturan Konversi String-to-Date izinkan aturan pemformatan tambahan (tanpa pengubah lain yang diterapkan). Jadi:
MMjuga cocok denganMONdanMONTH;MONcocok denganMONTH(dan sebaliknya);RRcocok denganRRRR; dan- Tanda baca bersifat opsional.
Jadi:
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;
Semua menghasilkan tanggal 2016-08-10T00:00:00 .
Anda dapat mencegahnya dengan menggunakan FX model format
Kemudian:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Memberikan:ORA-01858: a non-numeric character was found where a numeric was expected dan hanya akan cocok di mana kecocokan pola yang tepat ditemukan (walaupun RR akan tetap cocok dengan RRRR ).
Ya, Oracle secara implisit menggunakan TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) untuk melakukan konversi.
Jika Anda menggunakan:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Maka penyisipan Anda akan gagal.