我有一个时间戳列,其值为 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/