【问题标题】:Subtract ISO 8601 timestamps in Oracle在 Oracle 中减去 ISO 8601 时间戳
【发布时间】:2021-10-24 18:30:36
【问题描述】:

我想减去两个 ISO 8601 格式的时间戳 (2021-08-24T12:59:35Z - 2021-08-24T12:59:05Z) 认为最简单的方法是将此时间戳转换为纪元,然后减去。 只是无法获得适合转换的语法。 如何将 2021-08-24T12:59:05Z 转换为:1629809975?

【问题讨论】:

  • 你想为这两个起始值得到什么答案和数据类型?你从什么数据类型开始 - 字符串?

标签: oracle type-conversion timestamp unix-timestamp iso8601


【解决方案1】:

正如评论所说,很大程度上取决于您希望结果的格式。

如果您对INTERVAL 没问题,那么最简单的做法是使用TO_UTC_TIMESTAMP_TZ,它实际上将ISO 8601 格式的字符串作为参数:

SELECT TO_UTC_TIMESTAMP_TZ('2021-08-24T12:59:35Z') - TO_UTC_TIMESTAMP_TZ('2021-08-24T12:59:05Z') AS RESULT
FROM DUAL;

返回这个结果:

RESULT
+000000000 00:00:30.000000000

否则,如果你想要秒数,你可以合并CAST和ROUND得到结果:

SELECT ROUND((CAST(TO_UTC_TIMESTAMP_TZ('2021-08-24T12:59:35Z') AS DATE) - CAST(TO_UTC_TIMESTAMP_TZ('2021-08-24T12:59:05Z') AS DATE)) * 86400)  AS RESULT
FROM DUAL;
RESULT
30

这是一个显示两个选项的 DBFiddle (DBFiddle)

【讨论】:

  • 如果您还没有运行 Oracle 10,请使用 TO_TIMESTAMP_TZ('2021-08-24T12:59:35Z', 'YYYY-MM-DD"T"HH:MI:SS.FFTZR') 而不是 TO_UTC_TIMESTAMP_TZ
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2013-03-11
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2016-11-30
相关资源
最近更新 更多