Формат даты Oracle "2009-02-13T11: 46: 40 + 00: 00" - PullRequest
3 голосов
/ 05 мая 2009

У меня раньше была блестящая помощь, и я надеюсь, что вы снова вытащите меня из дыры.

Мне пришла дата от веб-службы в этом формате: 2009-02-13T11: 46: 40 + 00: 00

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

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

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

Спасибо:)

Gareth

Ответы [ 3 ]

7 голосов
/ 05 мая 2009

Вы можете напрямую преобразовать его в тип данных 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 отсутствует.)

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

5 голосов
/ 05 мая 2009
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
1 голос
/ 06 мая 2009

Для импорта даты в указанном формате вы можете установить nls_date_format.

Пример:

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

Таким образом, ваши операторы SQL могут быть короче (без приведения). Для различных масок смотрите Модели формата даты и времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...