0

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

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

但我得到X'414d51204d39392e5352442e4330302e56c47bd4203b3708'而不仅仅是414d51204d39392e5352442e4330302e56c47bd4203b3708

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

如何摆脱引号和“X”?

4

3 回答 3

2

我还没有足够的声誉来“添加评论”,但是使用这么多语言,我学会了不喜欢 SUBSTRING 和 LENGTH 类型的函数。在上面回答“2016 年 2 月 28 日 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”进行两次引用

于 2019-09-19T02:50:31.353 回答
1

你可以尝试这样的事情:

DECLARE msgId CHARACTER CAST(InputRoot.MQMD.MsgId AS CHARACTER);
SET OutputRoot.XMLNSC.Root.MsgId = SUBSTRING(msgId FROM 3 FOR LENGTH(msgId) - 3);
于 2016-02-28T10:41:59.520 回答
1

使用 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 ' ');
于 2019-09-22T02:06:07.297 回答