【问题标题】:SAP HANA GUID conversionSAP HANA GUID 转换
【发布时间】: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) 但不工作。

【问题讨论】:

    标签: guid hana


    【解决方案1】:

    UUID22 和 UUID16 是 SAP HANA 上不存在的 ABAP 数据类型。因此没有可用的内置转换功能。 但是,您可能想检查这个 SCN,因为这个话题之前已经讨论过几次了。例如。 SCN Convert GUID_X16 to GUID_C22

    【讨论】:

    • 感谢@Lars 的意见。我已经检查了 sdn,一些有趣的 cmets,但没有任何结论。我希望在 HANA DB 中进行转换,而不是在 ABAP 中。我的 HANA 数据类型是:VARBINARY(16)RAW 和 NVARCHAR(22)STRING。有什么想法吗?
    • 如前所述,没有这样的转换功能。您也许可以挖掘 ABAP 代码在两种格式之间进行转换,并在 SAP HANA 中创建自己的函数。
    【解决方案2】:

    您必须将创建的 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 函数的类似构造,并且会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2023-03-16
      相关资源
      最近更新 更多