时区的Oracle日期格式掩码是什么?

时区的Oracle日期格式掩码是什么?,oracle,date,formatting,mask,Oracle,Date,Formatting,Mask,我需要从外部源插入一个日期格式,其中包括时区的三个字母代码,但是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” Oracle中这种insert语句的正确掩码是什么 desc blah Name

我需要从外部源插入一个日期格式,其中包括时区的三个字母代码,但是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”

Oracle中这种insert语句的正确掩码是什么

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

编辑:我将表列从日期类型更改为时间戳类型,并得到相同的错误。

日期列没有时区作为选项。您必须将列创建为数据类型
TIMESTAMP WITH timezone
TIMESTAMP WITH LOCAL timezone
,此外,
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.

如果时区与您无关,只需使用SUBSTR函数将其从字符串中删除,然后插入,如第二个示例所示

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.