Преобразование метки времени в Oracle SQL

Я использую Oracle SQL, и у меня проблема с датами.

Я получил длинный скрипт со многими Insert командами, такими как:

Insert into MyTable 
(TIME,CROSS,BID,ASK) 
values (to_timestamp('13-NOV-14 03.38.27.785000000 PM','DD-MON-RR HH.MI.SSXFF AM'),'USD/CHF',0.96294,0.963);

Однако я получаю следующую ошибку:

ORA-01843 -  "not a valid month"

Вот формат системной даты:

22-FEB-15 04.57:18

Я попробовал следующую команду и получил ошибку формата:

alter session set nls_date_format = 'DD-MON-RR HH.MI:SSXFF';

Как я могу решить эту проблему? Кроме того, я хочу преобразовать эти даты в следующий формат:

DD/MM/YYYY HH24:MI:SS.miliseconds

Может ли это преобразование быть в команде вставки?

пожалуйста, порекомендуйте


person Omri    schedule 22.02.2015    source источник
comment
Я создал SQLFiddle для вашей проблемы, выполнил оператор INSERT в вашем вопросе и обнаружил, что он работает идеально. Таким образом, это проблема, локальная для вашей системы. Учитывая ошибку, я предполагаю, что ваша база данных может использовать локаль, в которой названия месяцев не являются английскими названиями месяцев, но, как я уже сказал, это всего лишь предположение. Удачи.   -  person Bob Jarvis - Reinstate Monica    schedule 22.02.2015


Ответы (1)


Подозревается, что ваш locale_specific NLS_DATE_LANGUAGE отличается.

Попробуйте выполнить следующий запрос с параметром NLS_DATE_LANGUAGE, включенным в to_timestamp:

to_timestamp('13-NOV-14 03.38.27.785000000 PM','DD-MON-RR HH.MI.SSXFF AM','NLS_DATE_LANGUAGE = AMERICAN')

См. это для другого варианта изменения сеанса.

person Lalit Kumar B    schedule 22.02.2015
comment
Спасибо, это работает. Не могли бы вы помочь мне со вторым вопросом? Я хочу изменить формат дат. Я мог бы вставить данные, но они в формате, с которым я не хочу работать. - person Omri; 22.02.2015
comment
Oracle не хранит даты в формате, который вы видите. Вы должны беспокоиться о формате только для его отображения. Так что не беспокойтесь, просто используйте оператор вставки, который у вас есть. Всякий раз, когда вы хотите отобразить значения с помощью запроса SELECT, вы используете TO_CHAR вместе с желаемой моделью формата. Пожалуйста, отметьте его как ответ, если он вам помог. - person Lalit Kumar B; 22.02.2015
comment
ХОРОШО. Спасибо. Несколько недель назад я изменил формат отображения, установив nls_date_format = 'YYYY-MM-DD HH24:MI:SS', но теперь это не работает. Ты знаешь почему? - person Omri; 22.02.2015
comment
Изменить сеанс устанавливает только настройки параметров для этого сеанса, после отключения/выхода из сеанса изменение сеанса не влияет на новые сеансы. Вы могли бы использовать, to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS','NLS_DATE_LANGUAGE='AMERICAN') - person Lalit Kumar B; 22.02.2015