12c 中的 Oracle 日期格式 9999-06-15T00:00:00.000+0000

Posted

技术标签:

【中文标题】12c 中的 Oracle 日期格式 9999-06-15T00:00:00.000+0000【英文标题】:Oracle Date formatting 9999-06-15T00:00:00.000+0000 in 12c 【发布时间】:2020-08-28 07:33:26 【问题描述】:

我从网络服务获得了一个 9999-06-15T00:00:00.000+0000 格式的日期。 如何将其保存到 Oracle 12c DB 中表的日期列中。

我试过了

 select to_date('9999-06-15T00:00:00.000+0000', 'YYYY-MM-DDTHH24:MI:SS.fff+0000')
 from dual;

但我收到错误“ORA-01821:日期格式无法识别”

非常感谢任何帮助

【问题讨论】:

这能回答你的问题吗? Convert String ISO-8601 date to oracle's timestamp datatype 您不能将to_date() 与小数秒或时区(区域或偏移量)一起使用。如果这些部分始终为零,则可以忽略它们;否则您需要将其转换为带有时区的时间戳。然后,如果需要,您可以将其转换为日期 - 或者它会在您插入时隐式发生;但您会丢失小数秒和时区信息。 【参考方案1】:

文字的格式符合timestamp 数据类型而不是date 数据类型。因此,使用to_timestamp 转换就足够了,如果它的格式没有以加号开头的结尾部分作为

SELECT TO_TIMESTAMP('9999-06-15T00:00:00.000', 'YYYY-MM-DD"T"HH24:MI:SS.FF3') AS ts      
  FROM dual;

将字母 T 引用为 "T",并在原始格式掩码中使用 .FF3 而不是 fff 作为后缀。有了这个尾随部分,我们需要一个转换 WITH TIME ZONE (TO_TIMESTAMP_TZ),它在加号后有 TZH (Time Zone Hour) 和 TZM (Time Zone Minute) 部分。所以,使用

SELECT TO_TIMESTAMP_TZ('9999-06-15T00:00:00.000+0000', 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') AS ts
  FROM dual;

符合您的数据模型。

Demo

【讨论】:

以上是关于12c 中的 Oracle 日期格式 9999-06-15T00:00:00.000+0000的主要内容,如果未能解决你的问题,请参考以下文章

oracle 12c 报错 ora-03137 来自客户机的格式错误的TTC包被拒绝

oracle 12c jdbc连接pdb报错的问题

关于 Oracle 12c 中的用户

Oracle12c:自动分区表

oracle12c中的ORA-28040

Oracle中的日期格式问题