【发布时间】:2013-08-07 00:13:28
【问题描述】:
Oracle 中是否有一种平滑的方法可以在当前时刻(当我执行调用时)获取 SESSIONTIMEZONE 和 DBTIMEZONE 之间的数值差异?
例如:
SELECT SESSIONTIMEZONE, DBTIMEZONE FROM DUAL;
返回:
+04:00 +07:00
所以,我需要某种函数,通过使用给定参数调用它,我得到这两个值之间的差异。
对于上面的例子:
SELECT get_numeric_offset(SESSIONTIMEZONE, DBTIMEZONE) FROM DUAL;
将返回 -3(符号很重要)。
当然,我可以自己编写这个函数,方法是处理字符串并解析它们,然后进行一些算术运算或做类似的事情(我仍然不认为这是一个非常顺利的解决方案:
SELECT (
CAST(SYSTIMESTAMP AT TIME ZONE SESSIONTIMEZONE AS DATE) -
CAST(SYSTIMESTAMP AT TIME ZONE DBTIMEZONE AS DATE)
)*24
FROM DUAL;
也许我错过了什么,而 Oracle 实际上提供了一种计算两个给定时区之间差异的方法?
【问题讨论】:
标签: oracle oracle11g oracle10g timezone timezone-offset