【问题标题】:What is the Oracle date formatting mask for time zones?什么是时区的 Oracle 日期格式掩码?
【发布时间】:2010-02-18 18:22:35
【问题描述】:

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

【问题讨论】:

    标签: oracle date formatting mask


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-06
        • 2012-04-01
        • 2016-07-03
        • 2017-04-12
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        相关资源
        最近更新 更多