在 Oracle 中减去 ISO 8601 时间戳
Subtract ISO 8601 timestamps in Oracle
我想减去两个 ISO 8601 格式的时间戳 (2021-08-24T12:59:35Z - 2021-08-24T12:59:05Z)
认为最简单的方法是将此时间戳转换为纪元,然后减去。
只是无法获得适合转换的语法。
如何将 2021-08-24T12:59:05Z 转换为:1629809975?
如评论所说,很大程度上取决于您希望如何格式化结果。
如果您可以使用 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;
哪个returns这个结果:
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)
我想减去两个 ISO 8601 格式的时间戳 (2021-08-24T12:59:35Z - 2021-08-24T12:59:05Z) 认为最简单的方法是将此时间戳转换为纪元,然后减去。 只是无法获得适合转换的语法。 如何将 2021-08-24T12:59:05Z 转换为:1629809975?
如评论所说,很大程度上取决于您希望如何格式化结果。
如果您可以使用 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;
哪个returns这个结果:
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)