2010-02-18 63 views
5

我需要插入来自外部来源,其中包括时区的三个字母的代码,日期格式,但TZD格式化面具似乎不工作...什么是时区的Oracle日期格式掩码?

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类型,并得到相同的错误。

回答

6

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

如果时区是不相关的你,使用SUBSTR函数从字符串只是剥离它,并插入在你的第二个例子。