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

标签 oracle timezone timestamp return sqldatatypes

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/

相关文章:

mysql - 如何在 Mosaic 中创建与任何外部数据库的连接?

oracle - PHP 5 oci_execute() : ORA-01008: not all variables bound

node.js - 如何在ejs中获取本地时区?

java - 与日历的毫秒时差太大

c++ - 获取当前小时 unix 时间戳

oracle - 检查 "it' 是否是 Oracle 中的数字”函数

c# - 尝试不需要针对 x86 和 x64 程序的两个单独的解决方案

php - PHP 和 MySQL 之间的时区差异

sql - 数据类型为 "timestamp with time zone"的时区存储

date - 在 Kendo UI Grid 中将 UNIX 时间戳格式化为人类日期的正确方法是什么?