首页 > 解决方案 > 在 Oracle 中减去 ISO 8601 时间戳

问题描述

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

标签: oracletype-conversiontimestampunix-timestampiso8601

解决方案


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

如果您对 没有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;

返回此结果:

结果
+000000000 00:00:30.000000000

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

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;
结果
30

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


推荐阅读