在 DB2 上将 HEX 值转换为 CHAR
Posted
技术标签:
【中文标题】在 DB2 上将 HEX 值转换为 CHAR【英文标题】:Convert HEX value to CHAR on DB2 【发布时间】:2011-10-27 08:17:36 【问题描述】:关于从SQL Server
到DB2
的数据复制,我有以下问题:
在DB2
上,我有一个包含(为简单起见)两列的表:COL1
和COL2
。
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这是与我的问题主题最接近的主题之一:
我花了 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的主要内容,如果未能解决你的问题,请参考以下文章