如何解决Oracle更改夏令时的时间戳列值
我有一个timestamp列,其值是12/02/2019 02:00:00。但是,当夏时制的几个月到来时,该值将自动更改为12/02/2019 01:00:00。现在,如果我将时区设置为欧洲/伊斯坦布尔,它将变为原始值。但是当夏令时发生时,我必须每隔几个月更改一次时区。我需要查询返回原始值。同样,对于正常月份,我必须将时区设置为亚洲/伊斯坦布尔,否则值将向前更改。
解决方法
如果您的列是用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。