Oracle 在 TZ_OFFSET() 之后不连接
Oracle doesn't concatenate after TZ_OFFSET()
执行 TZ_OFFSET 后的连接似乎没有注册。
示例:
SELECT '[' || TZ_OFFSET('Europe/Amsterdam') || ']' FROM DUAL
结果:
[+01:00
为什么 TZ_OFFSET() 后的连接没有发生?
这似乎是一个错误(1937516,我看不到;还有 9861391,它指的是基本错误 17291158,我也看不到),结合客户端行为。在 SQL*Plus 或 SQL 开发人员中,这看起来不错 - 有点:
select '[' || tz_offset('Europe/Amsterdam') || ']' from dual;
'['||TZ_O
---------
[+01:00 ]
似乎是额外的 space;尽管从 SQL 开发人员工作表中复制并粘贴它 - 在那里显示 - 也失去了右括号:
'['||TZ_O
---------
[+01:00
转储生成的值显示问题:
select dump('[' || tz_offset('Europe/Amsterdam') || ']') from dual;
DUMP('['||TZ_OFFSET('EUROPE/AMSTERDAM')||']')
---------------------------------------------
Typ=1 Len=9: 91,43,48,49,58,48,48,0,93
注意 0 字节,它是一个空字符,会引起混淆。
由于偏移格式是固定的,您可以通过简单的 substr()
:
来避免这种情况
select '[' || substr(tz_offset('Europe/Amsterdam'), 1, 6) || ']' from dual;
'['||SUB
--------
[+01:00]
select dump('[' || substr(tz_offset('Europe/Amsterdam'), 1, 6) || ']') from dual;
DUMP('['||SUBSTR(TZ_OFFSET('EUROPE/AMSTERDAM'),1,6)||']')
---------------------------------------------------------
Typ=1 Len=8: 91,43,48,49,58,48,48,93
...或评论中提到的replace()
或trim()
选项;或任何其他消除流氓角色的东西;甚至:
rtrim(tz_offset('Europe/Amsterdam'), chr(0))
由于错误在 MoS 中不可见,我不确定它何时(或是否)得到修复。看起来它存在于 11.2.0.0 中,我在 11.2.0.4 中看到它 - 它可能在 12c 中得到修复。我在 12.1.0.2 中没有看到它。
执行 TZ_OFFSET 后的连接似乎没有注册。 示例:
SELECT '[' || TZ_OFFSET('Europe/Amsterdam') || ']' FROM DUAL
结果:
[+01:00
为什么 TZ_OFFSET() 后的连接没有发生?
这似乎是一个错误(1937516,我看不到;还有 9861391,它指的是基本错误 17291158,我也看不到),结合客户端行为。在 SQL*Plus 或 SQL 开发人员中,这看起来不错 - 有点:
select '[' || tz_offset('Europe/Amsterdam') || ']' from dual;
'['||TZ_O
---------
[+01:00 ]
似乎是额外的 space;尽管从 SQL 开发人员工作表中复制并粘贴它 - 在那里显示 - 也失去了右括号:
'['||TZ_O
---------
[+01:00
转储生成的值显示问题:
select dump('[' || tz_offset('Europe/Amsterdam') || ']') from dual;
DUMP('['||TZ_OFFSET('EUROPE/AMSTERDAM')||']')
---------------------------------------------
Typ=1 Len=9: 91,43,48,49,58,48,48,0,93
注意 0 字节,它是一个空字符,会引起混淆。
由于偏移格式是固定的,您可以通过简单的 substr()
:
select '[' || substr(tz_offset('Europe/Amsterdam'), 1, 6) || ']' from dual;
'['||SUB
--------
[+01:00]
select dump('[' || substr(tz_offset('Europe/Amsterdam'), 1, 6) || ']') from dual;
DUMP('['||SUBSTR(TZ_OFFSET('EUROPE/AMSTERDAM'),1,6)||']')
---------------------------------------------------------
Typ=1 Len=8: 91,43,48,49,58,48,48,93
...或评论中提到的replace()
或trim()
选项;或任何其他消除流氓角色的东西;甚至:
rtrim(tz_offset('Europe/Amsterdam'), chr(0))
由于错误在 MoS 中不可见,我不确定它何时(或是否)得到修复。看起来它存在于 11.2.0.0 中,我在 11.2.0.4 中看到它 - 它可能在 12c 中得到修复。我在 12.1.0.2 中没有看到它。