gpt4 book ai didi

oracle - oracle中TZ_OFFSET函数的返回数据类型是什么?

转载 作者:行者123 更新时间:2023-12-02 02:23:54 24 4
gpt4 key购买 nike

oracle中函数TZ_OFFSET的返回数据类型是什么?

例如,

select tz_offset(DBTIMEZONE) from dual;

-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

Typ=1 表示 VARCHAR2,但请注意 ASCII 转储末尾有 ,0。这意味着该字符串具有 \0 类型的终止符。 VARCHAR2 通常不是这种情况,但我仍然将其视为通用字符串类型。

这可能因字符集而异;我不确定。我上面运行的查询针对的是 NLS_CHARACTERSET = WE8MSWIN1252NLS_NCHAR_CHARACTERSET = AL16UTF16 的 Oracle 实例。

<小时/>

附录 - 后续问题询问如何将 TZ_OFFSET 输出转换为数字。方法如下:

  1. 将小时部分转换为数字
  2. 将分钟部分转换为数字并除以 60
  3. 将两个值相加
  4. 处理偏移量的符号(+ 或 -)

注意:在意识到它不适用于包含分钟的负时区偏移后,我更新了此内容。例如,我的原始方程(现已删除)会将 -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
)

请注意,第三个 SUBSTR 指定“从位置 5 开始的 2 个字符”(SUBSTR(..., 5, 2))。通常你会说“从位置 5 到字符串末尾”(SUBSTR(..., 5)),但这将包括奇怪的尾随空字符 (\0 ,如DUMP中所示),这将导致错误。

关于oracle - oracle中TZ_OFFSET函数的返回数据类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com