【发布时间】:2014-02-07 03:29:00
【问题描述】:
我遇到了一个奇怪的情况。有人可以解释为什么时间戳和时间戳之间的比较行为如下(它取决于会话时区......)。此外,输出值在所有情况下都是相同的。 看起来时间戳从会话中继承时区以进行比较,但打印时却没有?
查询:
alter session set time_zone = '-6:0';
select cast(systimestamp as timestamp), systimestamp, case when cast(systimestamp as timestamp) < systimestamp then 'timestamp < systm' else 'timestamp >= systm' end as cmp from dual;
alter session set time_zone = '1:0';
select cast(systimestamp as timestamp), systimestamp, case when cast(systimestamp as timestamp) < systimestamp then 'timestamp < systm' else 'timestamp >= systm' end as cmp from dual;
输出:
CAST(SYSTIMESTAMPASTIMESTAMP) SYSTIMESTAMP CMP
----------------------------- ----------------------------------- ------------------
14/02/06 21:22:05,319973000 14/02/06 21:22:05,319973000 -06:00 timestamp >= systm
session SET altered.
CAST(SYSTIMESTAMPASTIMESTAMP) SYSTIMESTAMP CMP
----------------------------- ----------------------------------- ------------------
14/02/06 21:22:06,057183000 14/02/06 21:22:06,057183000 -06:00 timestamp < systm
数据库位于 -6 时区。 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64 位生产
【问题讨论】: