Las Reglas de conversión de cadena a fecha permitir reglas de formato adicionales (sin que se aplique ningún otro modificador). Entonces:
MM
también coincide conMON
yMONTH
;MON
coincide conMONTH
(y viceversa);RR
coincide conRRRR
; y- La puntuación es opcional.
Entonces:
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;
Todos generan la fecha 2016-08-10T00:00:00
.
Puede evitar esto usando FX
modelo de formato
Entonces:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Da:ORA-01858: a non-numeric character was found where a numeric was expected
y solo coincidiría donde se encuentra una coincidencia de patrón exacta (aunque RR
aún coincidirá con RRRR
).
Sí, Oracle está usando implícitamente TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT )
para hacer la conversión.
Si usa:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Entonces su inserción fallará.