【问题标题】:How to convert hexBinary (MsgId) to character in esql?如何将hexBinary(MsgId)转换为esql中的字符?
【发布时间】:2016-06-09 10:21:33
【问题描述】:

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

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

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

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

如何去掉引号和'X'?

【问题讨论】:

  • 下面有你的答案,但是请记住MsgId字段是二进制字段,这意味着如果你在需要数据转换的平台之间移动MsgID字段中的字符数据,MsgId字段未转换。
  • 谢谢,我只是觉得有比使用子字符串更漂亮的解决方案。
  • 你的意思是把评论放在那里。没有任何意义。您是否了解数据转换的含义 - 或者更确切地说是缺乏数据转换?
  • 其实OP是有道理的。本主题提供了特定于 XML 的方法来序列化所有 XML Schema 类型,除了 hexBinary(这是他们想要的)。 www-01.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/…

标签: ibm-mq messagebroker ibm-integration-bus extended-sql


【解决方案1】:

你可以试试这样的:

DECLARE msgId CHARACTER CAST(InputRoot.MQMD.MsgId AS CHARACTER);
SET OutputRoot.XMLNSC.Root.MsgId = SUBSTRING(msgId FROM 3 FOR LENGTH(msgId) - 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”的引用

    【讨论】:

      【解决方案3】:

      使用 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 ' ');
      

      【讨论】:

        猜你喜欢
        • 2012-05-30
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2011-12-31
        相关资源
        最近更新 更多