50

可能是经典之作...您知道在 Oracle 上检索 SYSDATE 的 UTC 值的简单技巧吗(最好也可以在第 8 版上使用)。

现在我有自定义功能:(

干杯,

斯特凡

4

5 回答 5

50

您可以使用

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;
于 2009-07-21T08:14:51.437 回答
45
select sys_extract_utc(systimestamp) from dual;

但是,它不适用于 Oracle 8。

于 2009-07-21T08:16:52.040 回答
29

通常,我使用 DATE 列,而不是某些答案使用的更大但更精确的 TIMESTAMP。

以下将返回当前的 UTC 日期——一个 DATE。

CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)

我经常像这样存储日期,通常以字段名称结尾,_UTC以使开发人员清楚。这使我可以避免时区的复杂性,直到用户客户端的最后一分钟转换。Oracle 可以使用某些数据类型存储时区详细信息,但这些类型需要比 DATE 更多的表空间,并且并不总是需要了解原始时区。

于 2013-07-24T22:16:29.433 回答
7

我在用着:

SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;

它对我来说很好。

于 2018-04-16T18:08:22.543 回答
5

如果你想要一个时间戳而不只是一个带有 sysdate 的日期,你可以使用 systimestamp 指定一个时区:

select systimestamp at time zone 'UTC' from dual

输出:29-AUG-17 06.51.14.781998000 PM UTC

于 2017-08-29T18:51:27.680 回答