Die String-to-Date-Konvertierungsregeln zusätzliche Formatierungsregeln zulassen (ohne dass andere Modifikatoren angewendet werden). Also:
MM
passt auch zuMON
undMONTH
;MON
stimmt mitMONTH
überein (und umgekehrt);RR
stimmt mitRRRR
überein; und- Die Satzzeichen sind optional.
Also:
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 generieren das Datum 2016-08-10T00:00:00
.
Sie können dies verhindern, indem Sie den FX
Formatmodell
Dann:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Ergibt:ORA-01858: a non-numeric character was found where a numeric was expected
und würde nur dort übereinstimmen, wo eine exakte Musterübereinstimmung gefunden wird (obwohl RR
stimmt immer noch mit RRRR
überein ).
Ja, Oracle verwendet implizit TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT )
um die Konvertierung durchzuführen.
Wenn Sie verwenden:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Dann schlägt Ihre Einfügung fehl.