De String-to-Date-conversieregels aanvullende opmaakregels toestaan (zonder dat andere modificaties worden toegepast). Dus:
MM
komt ook overeen metMON
enMONTH
;MON
komt overeen metMONTH
(en vice versa);RR
komt 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.