答案是:这取决于.
总的来说,您的数据库有三个时区
您的视野时区: 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列的表并且该列包含数据,则无法更改数据库.否则可以改变ALTER DATABASE SET TIME_ZONE='...';.在关闭并重新启动数据库之前,更改不会生效.
DBTIMEZONE在创建数据库时设置.如果在创建数据库时未提供时区,则Oracle默认为服务器操作系统的时区.
数据库服务器操作系统的时区:
此时区与结果相关
SYSDATE SYSTIMESTAMP当然,这个时区不能在数据库级别上更改.如果您所在的国家/地区使用夏令时,则此时区可能会每年更改两次.例如,您可以查询它SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual;.
因此,如果您的数据库服务器操作系统设置正确,那么您应该从下周开始夏令时(至少在欧洲)
我通过使用以下命令解决了此问题:“从 DUAL 中选择时区‘GMT’的 Systimestamp”。无论操作系统时间如何,此命令将始终给出 GMT 日期和时间。