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

时间:2010-02-18 18:22:35

标签: 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”......

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

1 row created.

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

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

编辑:我将表格列从DATE类型更改为TIMESTAMP类型并得到了相同的错误。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

如果时区与您无关,请使用SUBSTR函数将其从字符串中删除,并按照第二个示例进行插入。