Я просто заметил любопытное поведение оракула TO_DATE функция при использовании с параметром format_mask.Oracle TO_DATE NOT throwing error
В принципе, я вижу, что в одном случае он игнорирует данную маску формата и анализирует ввод своей собственной маской, а в других случаях он выдает исключение.
Пример I ожидаемое поведение - ошибка брошена:
SELECT TO_DATE('18-02-2016', 'DD/MON/YYYY') FROM dual
ORA-01843: не действительный месяц
Пример II неожиданное поведение - дата разобраны:
SELECT TO_DATE('18-feb-2016', 'DD/MM/YYYY') FROM dual
Февраль, 18 2016 00:00:00
Я не вижу ни одного замечания этого в документации, поэтому я интересно, если это incostincency является дизайн или это ошибка или, может быть, я не понимая, что-то верный?
Редактировать: Глядя на ответы, я могу согласиться с тем, что это, скорее всего, по дизайну. Но то, что делается здесь, выглядит опасно «автоматическим» для меня.
Что делать, если формат будет интерпретироваться (догадаться оракулом) неправильно? Есть ли какая-либо документация о том, что здесь происходит, поэтому я могу быть уверен, что это безопасно?
Мой вопрос будет тогда - могу ли я отключить его? Является ли мой единственный вариант проверки формата самостоятельно?
Я взял на себя смелость запуска фрагментов и редактирование вопроса включить фактический вывод. Я думаю, что это может означать, что вы получаете «ORA-01843: недействительный месяц», а не «ORA-01830: конец формата даты заканчивается перед преобразованием всей строки ввода» или что-то еще. –