De String-to-Date-conversieregels aanvullende opmaakregels toestaan (zonder dat andere modificaties worden toegepast). Dus:
MMkomt ook overeen metMONenMONTH;MONkomt overeen metMONTH(en vice versa);RRkomt overeen metRRRR; en- De interpunctie is optioneel.
Dus:
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;
Alle genereren de datum 2016-08-10T00:00:00 .
U kunt dit voorkomen door de FX formaatmodel
Dan:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Geeft:ORA-01858: a non-numeric character was found where a numeric was expected en zou alleen overeenkomen waar een exacte patroonovereenkomst wordt gevonden (hoewel RR komt nog steeds overeen met RRRR ).
Ja, Oracle gebruikt impliciet TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) om de conversie uit te voeren.
Als u gebruikt:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Dan zal je insert mislukken.