【问题标题】:Oracle Date formatting "2009-02-13T11:46:40+00:00"Oracle 日期格式“2009-02-13T11:46:40+00:00”
【发布时间】:2009-05-05 14:29:18
【问题描述】:

我以前得到过一些出色的帮助,我希望你能再次让我摆脱困境。

我有一个来自网络服务的日期,格式如下: 2009-02-13T11:46:40+00:00

在我看来,它看起来像标准的 UTC 格式。

我需要将它插入到 Oracle 数据库中,所以我在插入时使用了 to_date()。问题是,我无法为其获取匹配的格式字符串并不断收到“ORA-01861:文字与格式字符串不匹配”错误。

我知道这是一个相当微不足道的问题,但由于某种原因,我无法让它接受正确的格式字符串。任何帮助表示赞赏。

谢谢:)

加雷斯

【问题讨论】:

  • 您提供给 TO_DATE() 的掩码是什么?

标签: oracle date formatting


【解决方案1】:

您可以直接将其转换为 TIMESTAMP_WITH_TIME_ZONE 数据类型。

select
  to_timestamp_tz('2009-02-13T11:46:40+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
from
 dual

TO_TIMESTAMP_TZ('2009-02-13T11:46:40+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM
---------------------------------------------------------------------------
13-FEB-09 11.46.40.000000000 AM +00:00

(我假设输入字符串使用 24 小时制,因为没有 AM/PM 指示符。)

如果您想将其转换为简单的 DATE,可以,但会丢失时区信息。

【讨论】:

  • 戴夫,这真是太棒了——我不能使用 TIMESTAMP_WITH_TIME_ZONE 数据类型,尽管它不是我的数据库。但是,这将是首选的解决方案。干杯
  • 谢谢你,戴夫。 “T”周围的双引号是我需要让转换工作的魔法咒语。 :)
【解决方案2】:
SELECT  CAST(TO_TIMESTAMP_TZ(REPLACE('2009-02-13T11:46:40+00:00', 'T', ''), 'YYYY-MM-DD HH:MI:SS TZH:TZM') AS DATE)
FROM    dual

【讨论】:

    【解决方案3】:

    要以指定格式导入日期,您可以设置nls_date_format

    例子:

    alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'
    

    这样您的 SQL 语句可以更短(无强制转换)。各种面具请看Datetime Format Models

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2015-02-03
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多