我需要从外部源插入日期格式,其中包含时区的三个字母代码,但 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类型并得到了相同的错误。
答案 0 :(得分:6)
日期列没有时区作为选项。您必须将列创建为数据类型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.
答案 1 :(得分:0)
如果时区与您无关,请使用SUBSTR函数将其从字符串中删除,并按照第二个示例进行插入。