oracle - 如何在 Oracle 数据库中处理夏令时

标签 oracle oracle11g utc dst gmt

在其中一台 Oracle 数据库服务器中,当我触发“Select dbtimezone from dual”时,它显示“+01:00”,这是否意味着在夏季时钟会提前一小时?。在另一台服务器上显示“+00:00”是否意味着数据库服务器设置为 GMT ?但我在 oracle pl/sql 中使用 sysdate。客户端说 Aix 服务器在 DST 上,这是否意味着数据库服务器将在时钟更改后采用 AIX 服务器设置?
如何解决这个问题。

最佳答案

答案是:视情况而定。
您的数据库总共有 时区

  • 您的 session 时区:SESSIONTIMEZONE

  • 您可以通过 ALTER SESSION SET TIME_ZONE=... 更改此设置随时。它与结果相关
  • CURRENT_DATE
  • LOCALTIMESTAMP
  • CURRENT_TIMESTAMP

  • 也是你做的时候的目标时区CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)默认 SESSIONTIMEZONE可以通过环境变量设置ORA_SDTZ或(在 Windows 上)通过注册表项 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (对于 32 位客户端),分别为HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (对于 64 位客户端)。
  • 数据库时区:DBTIMEZONE

  • 其实这在日常使用中不是那么重要,它只与TIMESTAMP WITH LOCAL TIME ZONE相关。数据类型列并定义存储格式。
    这是不是 SYSDATE的时区或 SYSTIMESTAMP !!!
    您不能更改 DBTIMEZONE如果数据库包含带有 TIMESTAMP WITH LOCAL TIME ZONE 的表,则在您的数据库上column 并且该列包含数据。否则可以用 ALTER DATABASE SET TIME_ZONE='...'; 更改.直到数据库关闭并重新启动后,更改才会生效。DBTIMEZONE在创建数据库时设置。如果在创建数据库时未提供时区,则 Oracle 默认使用服务器操作系统的时区。
  • 数据库服务器操作系统时区:

  • 此时区与结果相关
  • SYSDATE
  • SYSTIMESTAMP

  • 当然,这个时区不能在数据库级别更改。如果您所在的国家/地区使用夏令时,则该时区可能每年更改两次。你可以用SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual;查询, 例如。
    因此,如果您的数据库服务器操作系统设置正确,那么您应该从下周开始(至少在欧洲)获得夏季时间

    关于oracle - 如何在 Oracle 数据库中处理夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271224/

    相关文章:

    sql - 无法在 SQuirreL SQL 客户端版本 3.5.0 中编辑别名属性?

    windows - Unix SSL 证书日期比 Windows 多 6 小时

    java - 为什么不推荐使用 Date.getTimezoneOffset?

    java - 将 PST 格式的日期和时间转换为 UTC 格式

    java - 如何在 Solaris 上的 Oracle 上安装 Java 类

    sql - 为什么 NVL 总是评估第二个参数

    java - 是否可以将 ojdbc7.jar 与 JDK8 一起使用?

    sql - 将 PL/SQL 代码运行到 Oracle 11g Express Edition - 错误

    c++ - 当 select 子句中使用 case 时,Oracle 数字精度和小数位数均为零

    mysql - SQL - 如何连接表但保留特定属性的所有值