在DB2上将HEX值转换为CHAR

时间:2011-10-27 08:17:37

标签: sql db2

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

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

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

通过将字符串转换为十六进制来从SQL复制

COL1,例如使用以下SQL查询"abcdefghij""6162636465666768696A""1111111111""31313131313131313131"

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

其中@InputString"abedefghij"

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

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

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

注意:十六进制值未使用"0x"预先修复的原因是因为样式2在CONVERT语句中使用。

4 个答案:

答案 0 :(得分:5)

select hex('A') from sysibm.sysdummy1; 

返回41。 和

select x'41' from sysibm.sysdummy1;

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

取自http://www.dbforums.com/db2/1627076-display-hex-columns.html

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

这是我遇到问题最密切的主题之一:

我已经失去了两天的时间来弄清楚如何使用SQL Developer迁移存储在DB2 BLOB字段中的XML文件。 (是的,迁移到SQL Developer并从中执行查询 - 我们正在从DB2迁移数据到Oracle,因此我们使用了这个工具)!

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

让我们先来看看问题是什么:

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

    enter image description here

  3. 铸造时,如:

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

    输出是在HEX中:

    enter image description here

    1. 没有任何效果......甚至不是本主题链接的解决方案。 !什么!
    2. 错误地找到了解决方案:

      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:

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

      3. 结果:

      4. enter image description here

答案 3 :(得分:0)

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

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