Oracle 更改夏令时的时间戳列值

标签 oracle plsql

我有一个时间戳列,其值为 12/02/2019 02:00:00。但是当夏令时的月份到来时,该值会自动更改为 12/02/2019 01:00:00。现在,如果我将时区设置为欧洲/ Istanbul 尔,它将成为原始值。但是当夏令时发生时,我必须每隔几个月不断更改时区。我需要查询返回原始值。同样,对于正常月份,我必须将时区设置为亚洲/ Istanbul 尔,否则值会向前变化。

最佳答案

如果您的列是用 timestamp with local time zone 定义的数据类型,它将与数据库时区一起存储并与 session 时区一起显示。
看看这个例子中 C3 列的显示值(不是存储值)是如何从 20:28 到 21:28 变化的:

SQL> create table t (
   c1 timestamp,
   c2 timestamp with time zone,
   c3 timestamp with local time zone
);

SQL> alter session set time_zone = 'Europe/Rome';

SQL> insert into t (c1, c2, c3) values (systimestamp, systimestamp, systimestamp);

SQL> select * from t;

C1                                                 C2                                  C3                                 
-------------------------------------------------- ----------------------------------- -----------------------------------
20/08/2020 20:28:17.942586                         20/08/2020 20:28:17.942586 +02:00   20/08/2020 20:28:17.942586

SQL> alter session set time_zone = 'Europe/Istanbul';

SQL> select * from t;

C1                                                 C2                                  C3                                 
-------------------------------------------------- ----------------------------------- -----------------------------------
20/08/2020 20:28:17.942586                         20/08/2020 20:28:17.942586 +02:00   20/08/2020 21:28:17.942586         

关于Oracle 更改夏令时的时间戳列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63509688/

相关文章:

database - 安装 Oracle Database 11g 第 2 版 (11.2.0.1.0) 时出现 RPM-GPG-KEY 错误

mysql - 根据经纬度查找用户

mysql - 如何从一组 ID 号中获取变量的 SUM? PLSQL

java - 如何在java中解析后获取pl sql包的详细信息

oracle - PLS-00103 : Encountered the symbol "END" when expecting one of the fo llowing

oracle - 如何将主查询列传递给嵌套子查询?

sql - 在 Oracle 中哪里可以找到表的段?

sql - 如何在 SQL 中按两行分组?

database - 插入触发器以验证唯一约束

java - 在 websphere IBM 中错误地将 varchar 转换为 date