#guid #hana
#идентификатор guid #hana
Вопрос:
Как я могу преобразовать тип данных GUID_C22 в SAP HANA (16 байтовый UUID 22) в GUID_X16 (UUID 16 raw). Я ожидаю чего-то вроде:
UUID22: 051Mf5p07jQZifdyH4x5}0 -> UUID16: 0050563C56401D36A348F362444845FC
Я пытался с:
hextoraw(UUID22)
но не работает.
Ответ №1:
UUID22 и UUID16 — это типы данных ABAP, которые не существуют в SAP HANA. Поэтому встроенная функция преобразования недоступна. Однако вы можете захотеть проверить SCN на этом, поскольку эта тема обсуждалась там ранее пару раз. Например. SCN Преобразует GUID_X16 в GUID_C22
Комментарии:
1. Спасибо @Lars за ваш вклад. Я уже проверил sdn, несколько интересных комментариев, но ничего убедительного. Я надеялся выполнить преобразование в базе данных HANA, а не в ABAP. Моими типами данных HANA являются: VARBINARY(16)RAW и NVARCHAR(22)STRING. Есть идеи?
2. Как уже упоминалось, такой функции преобразования нет. Возможно, вам удастся извлечь код ABAP для преобразования между двумя форматами и создать свою собственную функцию в SAP HANA.
Ответ №2:
Необходимо вырезать на куски длиной 3 шестнадцатеричное представление созданного UUID и преобразовать каждый из них в двухсимвольный фрагмент, состоящий только из цифр, строчных и прописных латинских букв и открывающей и закрывающей фигурной скобки. Я создал таблицу преобразования uuid_conv
с двумя столбцами hex:CHAR(3)
и c22:CHAR(2)
для этой цели с содержимым:
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, и она была бы лучше.