在 DB2 上将 HEX 值转换为 CHAR

Posted

技术标签:

【中文标题】在 DB2 上将 HEX 值转换为 CHAR【英文标题】:Convert HEX value to CHAR on DB2 【发布时间】: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 的列。还是想知道上面的答案,如果有人知道的话。 【参考方案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 文件/字符串?

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

    BLOB 中的数据是一个 XML 文件。

    在查询中选中时,得到:

    施放时,如:

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

输出为十六进制:

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

错误地找到了解决办法:

    在 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

    运行选择:

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

    结果:

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于在 DB2 上将 HEX 值转换为 CHAR的主要内容,如果未能解决你的问题,请参考以下文章

求HEX色值转CMYK/HSL/HSB值的VBA代码

在 Arduino 上将 int 或 String 转换为 char 数组

js中由var获取的值转转换为long值

在 DB2 中将位数据的 char 转换为整数

在 DB2 中将当前日期转换为 char

任何人都有一个代码将char数组转换为HEX?并回到实际结果?