Pravidla převodu řetězce na datum povolit další pravidla formátování (bez použití jakýchkoli dalších modifikátorů). Takže:
MM
odpovídá takéMON
aMONTH
;MON
odpovídáMONTH
(a naopak);RR
odpovídáRRRR
; a- Interpunkce je volitelná.
Takže:
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;
Všechny generují datum 2016-08-10T00:00:00
.
Tomu můžete zabránit pomocí FX
model formátu
Potom:
SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR' ) FROM DUAL;
Dává:ORA-01858: a non-numeric character was found where a numeric was expected
a odpovídal by pouze tam, kde je nalezena přesná shoda vzoru (ačkoli RR
bude stále odpovídat RRRR
).
Ano, Oracle implicitně používá TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT )
provést konverzi.
Pokud používáte:
ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';
Potom se vaše vložení nezdaří.