我在VARCHAR2类型中有ISO-8601日期,如何将该字符串日期转换为oracle db中的时间戳?
日期示例:" 2014-09-12T11:53:06 + 00:00和#34;
可能是以下内容,但我不确定格式是什么。
SELECT to_timestamp_tz ('2014-09-12T11:53:06+00:00', ????) FROM DUAL
答案 0 :(得分:15)
日期格式模型元素为listed in the 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
是时区分钟。其余的是更常见的模型元素。
答案 1 :(得分:1)
我有一个应用程序正在对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