【问题标题】:sysdate and dbtimezone different in Oracle DatabaseOracle 数据库中的 sysdate 和 dbtimezone 不同
【发布时间】:2019-03-03 00:33:27
【问题描述】:

使用此查询:select sysdate from dual;

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

与:Select dbtimezone from dual;

输出:+10:00

我希望sysdatedbtimezone 处于同一时区

我试图用alter database set time_zone='AEST' 来做这件事,但我有点困惑这是否是正确的解决方案。

非常感谢任何帮助。 谢谢。

【问题讨论】:

    标签: sql oracle timezone sysdate


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      DBTIMEZONESYSDATESYSTIMESTAMP 的时区是一个常见的误解

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

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

      如果你想在 DBTIMEZONE 运行当前时间

      select SYSTIMESTAMP AT TIME ZONE DBTIMEZONE 
      from dual;
      

      CURRENT_TIMESTAMP AT TIME ZONE DBTIMEZONE 也在工作。

      另见How to handle Day Light Saving in Oracle database

      【讨论】:

      • 好的..谢谢你的信息。
      猜你喜欢
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 2019-03-11
      • 2022-01-16
      相关资源
      最近更新 更多