我试图将MQMD.MsgId放到XMLNSC.MsgId字段中,如下所示:
SET OutputRoot.XMLNSC.Root.MsgId = InputRoot.MQMD.MsgId;
但我得到 X' 414d51204d39392e5352442e4330302e56c47bd4203b3708' 而非 414d51204d39392e5352442e4330302e56c47bd4203b3708 。
我也尝试将MsgId强制转换为CHARACTER,但结果是一样的。
如何摆脱引号和' X'?
答案 0 :(得分: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”的引用
答案 1 :(得分:1)
您可以尝试这样的事情:
DECLARE msgId CHARACTER CAST(InputRoot.MQMD.MsgId AS CHARACTER);
SET OutputRoot.XMLNSC.Root.MsgId = SUBSTRING(msgId FROM 3 FOR LENGTH(msgId) - 3);
答案 2 :(得分:1)
通过ESQL SUBSTRING,您还可以使用BEFORE和AFTER
DECLARE MsgIdAsChar CHAR SUBSTRING(SUBSTRING(CAST(InputRoot.MQMD.MsgId AS CHAR) AFTER '''') BEFORE '''');
查找字符串中的内容之前和之后也非常方便。
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 ' ');