【问题标题】:Convert HEX value to CHAR on DB2在 DB2 上将 HEX 值转换为 CHAR
【发布时间】:2011-10-27 08:17:36
【问题描述】:

关于从SQL ServerDB2 的数据复制,我有以下问题:

DB2 上,我有一个包含(为简单起见)两列的表:COL1COL2

COL1 定义为CHAR(20)COL2 定义为CHAR(10)

COL1 通过将字符串转换为十六进制来从 SQL 复制,例如"abcdefghij""6162636465666768696A""1111111111""31313131313131313131" 使用以下 SQL 查询:

CONVERT(char(20), cast(@InputString as binary) 2)

@InputString 将是 "abedefghij"

换句话说,COL1 包含十六进制值,但作为字符串(如果措辞不正确,请见谅)。

我需要将十六进制值转换回字符串并将这个值放入COL2

SQL 查询应该在DB2 上进行什么转换?我知道如何在 SQL Server 上执行此操作,但在 DB2 上不知道。

注意:十六进制值没有以"0x" 为前缀的原因是CONVERT 语句中使用了样式2。

【问题讨论】:

  • 解决了我的问题,有点。结果表明,在 SQL Server 上定义为 BINARY 的列将被正确复制到 DB2 上为 BIT 定义为 VARCHAR 的列。还是想知道上面的答案,如果有人知道的话。

标签: sql db2


【解决方案1】:
select hex('A') from sysibm.sysdummy1; 

返回 41。 和

select x'41' from sysibm.sysdummy1;

给你'A'。因此,您可以将其放入 for 循环中并遍历每对十六进制字符以到达原始字符串。或者您可以编写自己的 unhex 函数。

取自 dbforums.com /db2/1627076-display-hex-columns.html(2020 年 11 月编辑:原始源链接现在是垃圾网站)

【讨论】:

    【解决方案2】:

    DB2 具有内置的编码/解码功能。

    对于 OP 问题,请使用....

    select CAST(ColumnName as char(20) CCSID 37) as ColumnName from TableName where SomeConditionExists
    

    http://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.intro/src/tpc/db2z_introcodepage.dita

    【讨论】:

    • 谢谢!!希望我能给你不止一个赞成票:D
    • SQL0622N 子句“CCSID ”对此数据库无效。 SQLSTATE=56031
    【解决方案3】:

    这是与我的问题主题最接近的主题之一:

    我花了 2 天时间来弄清楚如何使用 SQL Developer 迁移存储在 DB2 BLOB 字段中的 XML 文件。 (是的,迁移到 SQL Developer 并执行查询——我们正在将数据从 DB2 迁移到 Oracle,所以我们使用了这个工具)!

    如何显示存储在 BLOB 中的 XML 文件/字符串?

    让我们开始吧,问题是什么:

    1. BLOB 中的数据是一个 XML 文件。
    2. 在查询中选中时,得到:

    3. 施放时,如:

    select CAST(BLOBCOLUMN as VARCHAR(1000)) from TABLE where id = 100;

    输出为十六进制:

    1. 没有任何效果... 甚至本主题链接中的解决方案都没有。 !没什么!

    错误地找到了解决办法:

    1. 在 DB2 中创建函数:

      CREATE FUNCTION unhex(in VARCHAR(32000) FOR BIT DATA) RETURNS VARCHAR(32000) LANGUAGE SQL CONTAINS SQL DETERMINISTIC NO EXTERNAL ACTION BEGIN ATOMIC RETURN in; END

    2. 运行选择:

      select UNHEX( CAST(BLOBCOLUMN as VARCHAR(32000) FOR BIT DATA)) from TABLE where id = 100;

    3. 结果:

    【讨论】:

      【解决方案4】:

      我用它来将 FOR BIT DATA 转换为字符:

      cast (colvalue as varchar(2000) ccsid ebcdic for sbcs data)
      

      【讨论】:

        猜你喜欢
        • 2019-06-13
        • 2012-06-01
        • 2011-07-03
        • 2015-07-11
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 2018-08-26
        相关资源
        最近更新 更多