【发布时间】:2020-11-20 01:01:35
【问题描述】:
我有一个 VARCHAR2 类型的 ISO-8601 日期,如何将该字符串日期转换为 oracle db 中的时间戳?
日期示例:“2014-09-12T11:53:06+00:00”
可能类似于以下内容,但我不确定格式是什么。
SELECT to_timestamp_tz ('2014-09-12T11:53:06+00:00', ????) FROM DUAL
【问题讨论】:
我有一个 VARCHAR2 类型的 ISO-8601 日期,如何将该字符串日期转换为 oracle db 中的时间戳?
日期示例:“2014-09-12T11:53:06+00:00”
可能类似于以下内容,但我不确定格式是什么。
SELECT to_timestamp_tz ('2014-09-12T11:53:06+00:00', ????) FROM DUAL
【问题讨论】:
日期格式模型元素列在Datetime Format Models documentation:
SELECT to_timestamp_tz ('2014-09-12T11:53:06+00:00', 'YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
FROM DUAL
TO_TIMESTAMP_TZ('2014-09-12T11:53:06+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
---------------------------------------------------------------------------
12-SEP-14 11.53.06.000000000 +00:00
固定的T 可以作为字符文字包含:
您可以在日期格式模型中包含这些字符:
- 连字符、斜杠、逗号、句号和冒号等标点符号
- 字符文字,用双引号括起来
TZH 是时区小时,TZM 是时区分钟。其余的是更常见的模型元素。
【讨论】:
我有一个应用程序正在对 OracleDB 数据库 (19c) 进行查询。 该应用正在发送 ISO 8601 格式的时间戳参数,并且该表有一个属于 Oracle TIMESTAMP 类型(不是 Oracle TIMESTAMP WITH TIMEZONE 类型)的列,该列用于存储表示 UTC 时间的时间戳。
我认为以下查询会起作用,但它似乎无法识别用双引号括起来的文字:
SELECT * FROM measurements
WHERE measID = '333'
AND measTime > to_timestamp('2020-11-19T05:00:00Z', 'YYYY-MM-DD"T"hh:mm:ss"Z"');
-- Doesn't Work
-- ORA-01810: format code appears twice
-- 01810. 00000 - "format code appears twice"
以下对我有用:
SELECT * FROM measurements
WHERE measID = '333'
AND measTime > SYS_EXTRACT_UTC(TO_UTC_TIMESTAMP_TZ('2020-11-19T05:00:00Z'));
-- Works
共享,因为在 Oracle 文档中并未立即明确将 ISO 8601 格式化为 TIMESTAMP 类型。 我在这里找到了这个解决方案: https://oracle-base.com/articles/18c/to_utc_timestamp_tz-function-18c
【讨论】: