5

我需要从外部来源插入一个日期格式,其中包括时区的三个字母代码,但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 类型并得到相同的错误。

4

2 回答 2

6

日期列没有时区作为选项。您必须将列创建为数据类型TIMESTAMP WITH TIME ZONEor 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.
于 2010-02-18T18:42:34.743 回答
0

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

于 2017-10-26T13:53:53.110 回答