2009-05-05 1 views
3

У меня была какая-то блестящая помощь, и я надеюсь, что вы снова вытащите меня из ямы.Oracle Дата форматирования «2009-02-13T11: 46: 40 + 00: 00»

Я получил дату, поступающие из веб-службы в этом формате: 2009-02-13T11: 46: 40 + 00: 00

для меня выглядит как стандартный формат UTC.

Мне нужно вставить его в базу данных Oracle, поэтому я использую to_date() для вставки. Проблема в том, что я не могу получить для нее соответствующую строку форматирования и продолжать получать ошибки «ORA-01861: literal does not match format string».

Я знаю его довольно тривиальную проблему, но по какой-то причине я не могу заставить ее принять правильную строку формата. Любая помощь оценивается.

Спасибо :)

Gareth

+0

Какую маску вы подаете TO_DATE()? – cagcowboy

ответ

4
SELECT CAST(TO_TIMESTAMP_TZ(REPLACE('2009-02-13T11:46:40+00:00', 'T', ''), 'YYYY-MM-DD HH:MI:SS TZH:TZM') AS DATE) 
FROM dual 
7

Вы можете напрямую преобразовать его в TIMESTAMP_WITH_TIME_ZONE типа данных.

select 
    to_timestamp_tz('2009-02-13T11:46:40+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM') 
from 
dual 

TO_TIMESTAMP_TZ('2009-02-13T11:46:40+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM 
--------------------------------------------------------------------------- 
13-FEB-09 11.46.40.000000000 AM +00:00 

(я предполагаю, что входная строка использует 24-часовой, так как нет AM/индикатор PM.)

Если вы хотите, чтобы преобразовать его в простой DATE, вы можете, но он потеряет информацию о часовом поясе.

+0

Dave, это блестящие приветствия - я не могу использовать тип данных TIMESTAMP_WITH_TIME_ZONE, хотя это не моя база данных. Однако это было бы предпочтительным решением. Cheers – Gareth

1

Чтобы импортировать дату в указанном формате, вы можете установить nls_date_format.

Пример:

alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS' 

Таким образом, ваши заявления SQL не может быть короче (не слепки). Для различной маски Посмотрите на Datetime Format Models

Смежные вопросы