Форматирование даты Oracle 9999-06-15T00: 00: 00.000 + 0000 в 12c

У меня есть дата из веб-сервиса в формате 9999-06-15T00:00:00.000+0000. Как сохранить это в столбце даты таблицы в Oracle 12c DB.

я пытался

 select to_date('9999-06-15T00:00:00.000+0000', 'YYYY-MM-DDTHH24:MI:SS.fff+0000')
 from dual;

но я получаю сообщение об ошибке "ORA-01821: формат даты не распознан"

Любая помощь высоко ценится

1 ответ

Формат литерала соответствует timestamp тип данных вместо dateтип данных. Итак, используяto_timestamp преобразование было бы достаточно, если бы он имел формат без конечной части, начинающейся со знака плюс как

SELECT TO_TIMESTAMP('9999-06-15T00:00:00.000', 'YYYY-MM-DD"T"HH24:MI:SS.FF3') AS ts      
  FROM dual;

письмо с цитатой T как "T"и с суффиксом .FF3 вместо того fffкак в маске исходного формата. Имея эту конечную часть, нам нужно преобразованиеWITH TIME ZONE (TO_TIMESTAMP_TZ) который имеет TZH (Time Zone Hour) а также TZM (Time Zone Minute) порции после знака плюс. Итак, используйте

SELECT TO_TIMESTAMP_TZ('9999-06-15T00:00:00.000+0000', 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') AS ts
  FROM dual;

в соответствии с вашей моделью данных.

Demo

Другие вопросы по тегам