【发布时间】:2010-11-12 13:46:00
【问题描述】:
可能是经典之作...您知道在 Oracle 上检索 SYSDATE 的 UTC 值的简单技巧吗(最好也可以在第 8 版上使用)。
现在我有自定义函数:(
干杯,
斯蒂芬
【问题讨论】:
可能是经典之作...您知道在 Oracle 上检索 SYSDATE 的 UTC 值的简单技巧吗(最好也可以在第 8 版上使用)。
现在我有自定义函数:(
干杯,
斯蒂芬
【问题讨论】:
你可以使用
SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL;
您可能还需要更改时区
ALTER SESSION SET TIME_ZONE = 'Europe/Berlin';
或阅读它
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual;
【讨论】:
select sys_extract_utc(systimestamp) from dual;
但不能在 Oracle 8 上运行。
【讨论】:
通常,我使用 DATE 列,而不是某些答案使用的更大但更精确的 TIMESTAMP。
以下内容将返回当前的 UTC 日期——一个 DATE。
CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)
我经常这样存储日期,通常字段名称以_UTC 结尾,以便开发人员清楚。这使我可以避免时区的复杂性,直到用户客户端的最后一分钟转换。 Oracle 可以使用某些数据类型存储时区详细信息,但这些类型需要比 DATE 更多的表空间,并且并不总是需要知道原始时区。
【讨论】:
我正在使用:
SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;
对我来说效果很好。
【讨论】:
如果您想要一个时间戳而不只是使用 sysdate 的日期,您可以使用 systimestamp 指定一个时区:
select systimestamp at time zone 'UTC' from dual
输出:29-AUG-17 06.51.14.781998000 PM UTC
【讨论】: