如何将 hexBinary (MsgId) 转换为 esql 中的字符?

How to convert hexBinary (MsgId) to character in esql?

我正在尝试将 MQMD.MsgId 放入 XMLNSC.MsgId 字段,如下所示:

SET OutputRoot.XMLNSC.Root.MsgId = InputRoot.MQMD.MsgId;

但我得到的是 X'414d51204d39392e5352442e4330302e56c47bd4203b3708' 而不仅仅是 414d51204d39392e5352442e4330302e56c47b213=42][03=bd170][03=]。

我也试过将 MsgId 转换为 CHARACTER,但结果是一样的。

如何去除引号和 'X'?

您可以尝试这样的操作:

DECLARE msgId CHARACTER CAST(InputRoot.MQMD.MsgId AS CHARACTER);
SET OutputRoot.XMLNSC.Root.MsgId = SUBSTRING(msgId FROM 3 FOR LENGTH(msgId) - 3);

我还没有足够的声誉 'add a commment',但是使用这么多语言,我已经学会了不喜欢 SUBSTRING 和 LENGTH 类型的函数。对于上面的答案 'Feb 28 2016 at 10:41'(是的,我发现这个答案是为了回应我自己的搜索——对于上面的 "CAST(InputRoot.MQMD.MsgId AS CHAR)",我选择使用这个:

DECLARE MsgId CHAR RIGHT(LEFT(CAST(InputRoot.MQMD.MsgId AS CHAR),50),48);

这假设 MsgId 始终是 24 个十六进制对长 (24x2=48),并且首先是 LEFT 50(去掉最后一个单引号),然后是 RIGHT 48(去掉第一个 X 字符和第一个单引号) .有人不同意这个假设吗?它还具有压缩到一行的好处,因为没有必要在 'SUBSTRING'

中有两个对 "MsgId" 的引用

对于 ESQL SUBSTRING,您还可以使用 BEFORE 和 AFTER

DECLARE MsgIdAsChar CHAR SUBSTRING(SUBSTRING(CAST(InputRoot.MQMD.MsgId AS CHAR) AFTER '''') BEFORE '''');

在查找字符串中的内容时,BEFORE 和 AFTER 也非常方便。

DECLARE TheHaystack CHAR ‘Where a value is 99 out of a maximum value of 100);
DECLARE TheValue CHAR SUBSTRING(SUBSTRING(TheHaystack AFTER 'value is ') BEFORE ' ');