sib*_*ani 2 oracle timezone timestamp return sqldatatypes
oracle中函数TZ_OFFSET的返回数据类型是什么?
例如,
select tz_offset(DBTIMEZONE) from dual;
Run Code Online (Sandbox Code Playgroud)
-04:00
它看起来像是VARCHAR2:
SQL> SELECT TZ_OFFSET('UTC'), DUMP(TZ_OFFSET('UTC')) FROM DUAL;
TZ_OFFS DUMP(TZ_OFFSET('UTC'))
------- --------------------------------
+00:00 Typ=1 Len=7: 43,48,48,58,48,48,0
Run Code Online (Sandbox Code Playgroud)
该Typ=1指示VARCHAR2,但要注意,ASCII转储有,0结尾.这意味着该字符串具有一个\0-type终止符.通常情况并非如此,VARCHAR2但我仍然将其视为通用的字符串类型.
这可能因字符集而异; 我不确定.我上面运行的查询是针对带有NLS_CHARACTERSET= WE8MSWIN1252和NLS_NCHAR_CHARACTERSET= 的Oracle实例AL16UTF16.
附录 - 后续问题询问如何将TZ_OFFSET输出转换为数字.这是如何做:
注意:我在意识到它不适用于包含分钟的负时区偏移后更新了这个.例如,我的原始等式(现已删除)将转换-03:30为-2.5而不是-3.5.
这是完整的命令:
SIGN(TO_NUMBER(SUBSTR(TZ_OFFSET('whatever'), 1, 3))) * (
TO_NUMBER(SUBSTR(TZ_OFFSET('whatever'), 2, 2)) +
TO_NUMBER(SUBSTR(TZ_OFFSET('whatever'), 5, 2)) / 60
)
Run Code Online (Sandbox Code Playgroud)
请注意,第三个SUBSTR指定"从位置5开始的2个字符"(SUBSTR(..., 5, 2)).通常你会说"从位置5到字符串末尾"(SUBSTR(..., 5)),但是这将包括奇怪的尾随null-char(\0如中所示DUMP),这将导致错误.
| 归档时间: |
|
| 查看次数: |
4509 次 |
| 最近记录: |