如何将 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 ' ');
我正在尝试将 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 ' ');