Las Reglas de conversión de cadena a fecha permitir reglas de formato adicionales (sin que se aplique ningún otro modificador). Entonces:
MMtambién coincide conMONyMONTH;MONcoincide conMONTH(y viceversa);RRcoincide 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á.