Что такое маска форматирования даты Oracle для часовых поясов?

Мне нужно вставить формат даты из внешнего источника, который включает трехбуквенный код часового пояса, но маска форматирования 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 и получил ту же ошибку.


person dacracot    schedule 18.02.2010    source источник


Ответы (2)


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

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.
person Adam Musch    schedule 18.02.2010

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

person Ananth N    schedule 26.10.2017