Из документации Oracle по форматным моделям:
FX
Формат точный. Этот модификатор определяет точное соответствие для символьного аргумента и модели формата даты и времени функции TO_DATE
:
- Пунктуация и текст в кавычках в символьном аргументе должны точно соответствовать (кроме регистра) соответствующим частям модели формата.
- Аргумент символа не может иметь лишних пробелов. Без FX Oracle игнорирует лишние пробелы.
- Числовые данные в символьном аргументе должны иметь такое же количество цифр, что и соответствующий элемент в модели формата. Без
FX
числа в символьном аргументе могут опускать ведущие нули.
- Когда
FX
включен, вы можете отключить эту проверку для начальных нулей, также используя модификатор FM
.
Без модели формата FX
:
SELECT TO_DATE( '1.5.2018', 'DD.MM.YYYY' ) AS value FROM DUAL;
Будет работать и выходы (с моей NLS_DATE_FORMAT
настройкой):
VALUE
--------------------
2018-05-01T00:00:00Z
и комбинации с дополнительными пробелами:
SELECT TO_DATE( '1 . 5 . 2018', 'DD.MM.YYYY' ) FROM DUAL;
С моделью FX
формата :
SELECT TO_DATE( '1.5.2018', 'FXDD.MM.YYYY' ) AS value FROM DUAL;
Дает:
ORA-01862: the numeric value does not match the length of the format item
Указание ведущих нулей будет работать:
SELECT TO_DATE( '01.05.2018', 'FXDD.MM.YYYY' ) FROM DUAL;
VALUE
--------------------
2018-05-01T00:00:00Z
Но добавление лишних пробелов не будет:
SELECT TO_DATE( '01 . 05. 2018', 'FXDD.MM.YYYY' ) FROM DUAL;
ORA-01861: literal does not match format string
Для подавления проверки на ведущие нули вы также можете использовать модель формата FM
:
SELECT TO_DATE( '1.5.2018', 'FMFXDD.MM.YYYY' ) FROM DUAL;
Какие выходы:
VALUE
--------------------
2018-05-01T00:00:00Z
Но оператор не будет работать с лишними пробелами
SELECT TO_DATE( '1.5 .2018', 'FMFXDD.MM.YYYY' ) FROM DUAL;
ORA-01861: literal does not match format string