可能是经典之作...您知道在 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