我遇到了一個奇怪的情況。有人可以解釋爲什麼時間戳和時間戳之間的比較行爲如下(它取決於會話時區...)。此外,在所有情況下,輸出值都是相同的。 它看起來像時間戳從會話繼承時區出於比較的目的,但打印它不?基於時區的systimestamp和Oracle上的時間戳比較
查詢:
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數據庫11g企業版版本11.2.0.3.0 - 64位生產