Oracle数据库中的sysdate和dbtimezone不同

时间:2018-09-27 06:54:29

标签: sql oracle timezone sysdate

使用以下查询:select sysdate from dual;

结果是:27-09-2018 07:50:50-这UK

与:Select dbtimezone from dual;

输出:+10:00

我希望sysdatedbtimezone处于相同时区

我试图用alter database set time_zone='AEST'来做到这一点,但是如果这是正确的解决方案,我会感到困惑。

最感谢您的帮助。 谢谢。

2 个答案:

答案 0 :(得分:1)

常见的误解是DBTIMEZONESYSDATESYSTIMESTAMP的时区

SYSDATESYSTIMESTAMP在数据库服务器所在的操作系统的时区中返回。

DBTIMEZONETIMESTAMP WITH LOCAL TIME值的(内部)时区。我不知道有什么实际用途。请注意,如果数据库包含带有DBTIMEZONE列的表且该列包含数据,则无法在数据库上更改TIMESTAMP WITH LOCAL TIME ZONE

我要运行DBTIMEZONE的当前时间

select SYSTIMESTAMP AT TIME ZONE DBTIMEZONE 
from dual;

CURRENT_TIMESTAMP AT TIME ZONE DBTIMEZONE也在工作。

另请参阅How to handle Day Light Saving in Oracle database

答案 1 :(得分:0)

SYSDATE返回为数据库服务器所在的操作系统设置的当前日期和时间。

CURRENT_DATE返回会话时区中的当前日期。

show parameter nls_date_format

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
nls_date_format                string      dd-Mon-yyyy hh24:mi:ss


select sysdate, current_date, dbtimezone from dual;

SYSDATE              CURRENT_DATE         DBTIME
-------------------- -------------------- ------
27-Sep-2018 08:16:00 27-Sep-2018 08:16:00 +00:00


alter session set time_zone = '+08:00';

Session altered.


select sysdate, current_date, dbtimezone from dual;

SYSDATE              CURRENT_DATE         DBTIME
-------------------- -------------------- ------
27-Sep-2018 08:13:06 27-Sep-2018 15:13:06 +00:00