varchar2 строка в формате даты - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь преобразовать приведенное ниже строковое значение в TO_DATE, но оракул не распознает формат даты.Где я иду не так.

SELECT TO_DATE('Wed Oct 10 23:50:00 2018 UTC','Dy Mon DD HH24:MI:SS YYYY TZR','NLS_DATE_LANGUAGE = American') 
FROM dual;

ОШИБКА в строке 1:

ORA-01821: формат даты не распознан

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Если (и я понимаю, что это большое «если»), строковые значения всегда содержат UTC, а не какие-либо другие значения часового пояса, то вы можете просто рассматривать это как символьный литерал .Это можно сделать, изменив модель формата с TZR, которая не распознается to_date(), на "UTC", включая двойные кавычки:

SELECT TO_DATE('Wed Oct 10 23:50:00 2018 UTC',
  'Dy Mon DD HH24:MI:SS YYYY "UTC"',
  'NLS_DATE_LANGUAGE = American') 
FROM dual;

TO_DATE('WEDOCT1023
-------------------
2018-10-10 23:50:00

Конечно, так как этов обычную дату у него все еще нет информации о часовом поясе, но если вы хотите сохранить его, вам все равно понадобится метка времени с типом данных [local] time zone.

0 голосов
/ 17 октября 2018

Использование:

SELECT TO_TIMESTAMP_TZ('Wed Oct 10 23:50:00 2018 UTC','DY MON DD HH24:MI:SS YYYY TZR','NLS_DATE_LANGUAGE=American') 
FROM dual;

TO_DATE Функция возвращает тип данных DATE, который не поддерживает часовые пояса.Вы используете TZR спецификатор формата в своем запросе (регион часового пояса), и это приводит к ошибке, потому что DATE не поддерживает это.


Эта документация - Часовые пояса показываеткакие типы данных поддерживают часовые пояса, и заявляет, что только TIMESTAMP WITH TIME ZONE и TIMESTAMP WITH LOCAL TIME ZONE делают.Поэтому вы должны преобразовать в один из этих типов данных вместо преобразования в DATE.

TO_TIMESTAMP_TZ Функция преобразует литерал в TIMESTAMP WITH TIME ZONE тип данных.

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