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的主要内容,如果未能解决你的问题,请参考以下文章