2016-06-06 2 views
1

У меня есть инструкция insert, где одно из вставленных полей - дата. Я использую to_date функцию, чтобы преобразовать строку в дату таким образом:Oracle to_date format issue

to_date('10-MAY-10', 'DD-MON-RR') 

Он отлично работает, но я обнаружил, что она позволяет также варианты, как:

to_date('10?MAY?10', 'DD-MON-RR') 
to_date('10+MAY+10', 'DD-MON-RR') 

Я ожидаю, что ошибка Oracle, однако он делает вставку. Не могли бы вы объяснить, почему или дать ссылку на соответствующую документацию?

+0

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924 – Rene

+1

Вы не должны использовать 'TO_DATE' с названиями месяцев без указания (например, 'to_date ('10 -MAY-10 ',' DD-MON-RR ',' NLS_DATE_LANGUAGE = AMERICAN''). В противном случае вы зависите от настроек сеанса, которые могут быть установлены на другом языке, где« MAY »не имеет смысл. Почему вы не используете простой литерал даты (например, 'date'2010-05-10'')? –

+0

В моем приложении я использую дату так, как вы сказали« 2015-05-10 ». Я просто хочу знать, почему Oracle не отклоняет такие значения, как «2015? 05? 10», и можно ограничивать ограничители только «-». – mvb13

ответ

1

Oracle проверит другие форматы, если не найдет совпадение в строке - вы можете видеть правила для того, что ищет here in the documentation.

В стороне от лет четыре цифры. Пожалуйста, убедитесь, что вы указали все четыре, когда вы предоставляете дату-как-строку, где это возможно; это избавляет базу данных от необходимости угадывать и потенциально ошибаться. То есть Ваш оригинальный пример должен быть:

to_date('10-05-2010', 'DD-MM-YYYY')

Если вам необходимо ограничить дата-как-строку в определенном формате, вы можете использовать модификатор формата FX, которая упоминается ранее в том же документе I связанный с ранее.

например. to_date('10/05/2010', 'dd-mm-yyyy') будет соответствовать, но to_date('10/05/2010', 'fxdd-mm-yyyy') потерпит неудачу