Le Regole di conversione da stringa a data consentire regole di formattazione aggiuntive (senza l'applicazione di altri modificatori). Quindi:
MM
corrisponde anche aMON
eMONTH
;MON
corrisponde aMONTH
(e viceversa);RR
corrisponde aRRRR
; e- La punteggiatura è facoltativa.
Quindi:
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;
Tutti generano la data 2016-08-10T00:00:00
.
Puoi impedirlo utilizzando FX
modello di formato
Quindi:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Fornisce:ORA-01858: a non-numeric character was found where a numeric was expected
e corrisponderebbe solo dove viene trovata una corrispondenza esatta del modello (sebbene RR
corrisponderà ancora a RRRR
).
Sì, Oracle utilizza implicitamente TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT )
per eseguire la conversione.
Se usi:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Quindi il tuo inserimento fallirà.