【发布时间】:2016-10-08 20:33:58
【问题描述】:
在 SAP HANA 中 如何从 GUID_C22 数据类型(16 字节 UUID 22)转换为 GUID_X16(UUID 16 raw)。 我正在尝试类似的东西:
UUID22: 051Mf5p07jQZifdyH4x5}0 -> UUID16: 0050563C56401D36A348F362444845FC
我尝试过:
hextoraw(UUID22)
但不工作。
【问题讨论】:
在 SAP HANA 中 如何从 GUID_C22 数据类型(16 字节 UUID 22)转换为 GUID_X16(UUID 16 raw)。 我正在尝试类似的东西:
UUID22: 051Mf5p07jQZifdyH4x5}0 -> UUID16: 0050563C56401D36A348F362444845FC
我尝试过:
hextoraw(UUID22)
但不工作。
【问题讨论】:
UUID22 和 UUID16 是 SAP HANA 上不存在的 ABAP 数据类型。因此没有可用的内置转换功能。 但是,您可能想检查这个 SCN,因为这个话题之前已经讨论过几次了。例如。 SCN Convert GUID_X16 to GUID_C22
【讨论】:
您必须将创建的 UUID 的十六进制表示切割成长度为 3 的片段,并将它们中的每一个转换为仅包含数字、小写和大写拉丁字母以及开始和结束花括号的两个字符。为此,我创建了一个包含两列 hex:CHAR(3) 和 c22:CHAR(2) 的转换表 uuid_conv,其中包含以下内容:
hex c22
--- ---
000 00
001 01
...
03C 0y
03D 0z
03E 0{
03F 0}
...
FFB }x
FFC }y
FFD }z
FFE }{
FFF }}
使用您喜欢的电子表格生成必要的内容。
后来我加入了它,如下所示:
with uuid as (
select to_varchar(sysuuid) uuid from dummy
),
y as (
select uuid, substring(uuid, 1, 3) as ta,
substring(uuid, 4, 3) as tb,
substring(uuid, 7, 3) as tc,
substring(uuid, 10, 3) as td,
substring(uuid, 13, 3) as te,
substring(uuid, 16, 3) as tf,
substring(uuid, 19, 3) as tg,
substring(uuid, 22, 3) as th,
substring(uuid, 25, 3) as ti,
substring(uuid, 28, 3) as tj,
'0'||substring(uuid, 31, 2) as tk
from uuid )
select uuid, ck.c22 || cj.c22 || ci.c22 || ch.c22 || cg.c22
|| cf.c22 || ce.c22 || cd.c22 || cc.c22 || cb.c22 || ca.c22
from y
inner join uuid_conv ca on (ca.hex = ta)
inner join uuid_conv cb on (cb.hex = tb)
inner join uuid_conv cc on (cc.hex = tc)
inner join uuid_conv cd on (cd.hex = td)
inner join uuid_conv ce on (ce.hex = te)
inner join uuid_conv cf on (cf.hex = tf)
inner join uuid_conv cg on (cg.hex = tg)
inner join uuid_conv ch on (ch.hex = th)
inner join uuid_conv ci on (ci.hex = ti)
inner join uuid_conv cj on (cj.hex = tj)
inner join uuid_conv ck on (ck.hex = tk)
可以考虑使用 SQLSCRIPT 函数的类似构造,并且会更好。
【讨论】: