如何在Oracle上获取SYSDATE的UTC值

sti*_*tic 40 oracle timezone utc

可能是一个经典...你知道在Oracle上检索SYSDATE的UTC值的一个简单技巧(最好是在第8版本上也可以获得一些东西).

现在我有自定义功能:(

干杯,

斯特凡

Jon*_*han 40

您可以使用

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

您可能还需要更改时区

ALTER SESSION SET TIME_ZONE = 'Europe/Berlin';
Run Code Online (Sandbox Code Playgroud)

或者阅读它

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual;
Run Code Online (Sandbox Code Playgroud)


Jur*_*ris 39

select sys_extract_utc(systimestamp) from dual;
Run Code Online (Sandbox Code Playgroud)

但是,它不适用于Oracle 8.


Cha*_*rns 20

通常,我使用DATE列,而不是更大但更精确的TIMESTAMP.

以下将返回当前的UTC日期 - DATE.

CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE)
Run Code Online (Sandbox Code Playgroud)

使用UTC日期非常棒,因为我不必担心时区的复杂性.只有最终显示给用户需要抵消或其他麻烦.

  • DATE列包含精度为1秒的时间组件.与TIMESTAMP列的不同之处在于,TIMESTAMP存储的精度大于1秒.实际上,如果要截断时间组件,则要将TRUNC添加到上面是您要执行的操作. (2认同)

小智 7

我正在使用:

SELECT CAST(SYSTIMESTAMP AT TIME ZONE 'UTC' AS DATE) FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

它对我来说很好用。


Nat*_*utz 5

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

select systimestamp at time zone 'UTC' from dual
Run Code Online (Sandbox Code Playgroud)

输出: 29-AUG-17 06.51.14.781998000 PM UTC