Что такое маска форматирования даты Oracle для часовых поясов? - PullRequest
5 голосов
/ 18 февраля 2010

Мне нужно вставить формат даты из внешнего источника, который включает трехбуквенный код для часового пояса, но маска форматирования TZD , похоже, не работает ...

insert into blah
    values (to_date('Thu, 18 Feb 2010 08:37:00 EST','Dy, DD Mon YYYY HH24:MI:SS TZD'));

ORA-01821: date format not recognized

Если я удалю «TZD» ...

insert into blah
    values (to_date('Thu, 18 Feb 2010 08:37:00','Dy, DD Mon YYYY HH24:MI:SS'));

1 row created.

Какая маска подходит для такого оператора вставки в Oracle?

desc blah
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 D                          DATE

Редактировать: я изменил столбец таблицыиз типа DATE в тип TIMESTAMP и получил ту же ошибку.

Ответы [ 2 ]

6 голосов
/ 18 февраля 2010

Столбцы даты не имеют часовой пояс в качестве опции. Вам нужно будет создать столбец с типом данных TIMESTAMP WITH TIME ZONE или TIMESTAMP WITH LOCAL TIME ZONE, и кроме того, функция TO_DATE не понимает применяемую маску формата TIME ZONE.

SQL> CREATE TABLE T
  2  (DT DATE,
  3   TS TIMESTAMP,
  4   TSTZ TIMESTAMP WITH TIME ZONE,
  5   TSLTZ TIMESTAMP WITH LOCAL TIME ZONE);

Table created.

SQL> INSERT INTO T (TSLTZ) VALUES 
  2  (to_timestamp_tz('Thu, 18 Feb 2010 08:37:00 EST','DY, DD Mon YYYY HH24:MI:SS TZD'))
  3  /

1 row created.

SQL> INSERT INTO T (TSTZ) VALUES 
  2  (to_timestamp_tz('Thu, 18 Feb 2010 08:37:00 EST','DY, DD Mon YYYY HH24:MI:SS TZD'))
  3  /

1 row created.
0 голосов
/ 26 октября 2017

Если часовой пояс вам не подходит, просто удалите его из строки, используя функцию SUBSTR, и вставьте, как во втором примере.

...