在SQL中将字符串转换为十六进制

12
我正在寻找一种方法将字符串转换为其十六进制值的SQL代码。我需要一种Informix友好的方法,但我显然更喜欢一些数据库中性的方法。
这是我现在正在使用的选择:
SELECT SomeStringColumn from SomeTable

这是我想使用的选择语句:SELECT hex(SomeStringColumn) from SomeTable

不幸的是,事情并没有那么简单... Informix 给了我这个消息: 字符转数值转换错误

有什么想法吗?


1
HEX函数用于将整数(或INT8或BIGINT)转换为十六进制字符串。您从HEX_STRING(“xyz”)中寻求的输出是什么? - Jonathan Leffler
此外,选择一个答案是礼貌的行为——如果没有任何回答解决了你的问题,那么修改你的问题以便更容易理解也是明智的做法。你应该努力选择最佳答案,谢谢。 - Jonathan Leffler
1
你应该重新表述你的问题。显然,你不想将字符串解释为数字(“12”-> 12)。看起来你想将底层字节转换为十六进制。(“abc”-> 十六进制)。你想要ASCII码,Unicode,还是其他什么?请具体说明。 - colithium
7个回答

21

你能否使用 Cast 和 fn_varbintohexstr 函数?

SELECT master.dbo.fn_varbintohexstr(CAST(SomeStringColumn AS varbinary)) 
FROM SomeTable

我不确定你的数据库系统是否有这个功能,它在MS-SQL中。

我刚刚在我的SQL服务器MMC上尝试了一下,针对其中的一个表:

SELECT     master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer

这个操作按预期完成。可能我所知道的MS-SQL上的master.dbo.fn_varbintohexstr函数类似于Informix的hex()函数,因此可以尝试:

SELECT     hex(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM         Customer

2
我觉得你回答了他本想问的问题。+1 - colithium
2
即使在 MSSQL 中,该函数也不受支持/记录。如果您需要与未来版本的 MS SQL Server 兼容性,请不建议使用该函数。 - Faiz

9
以下内容适用于 Sql 2005。
select convert(varbinary, SomeStringColumn) from SomeTable

非常准确。这应该是被选中的答案。 - the.jxc
这将产生一个varbinary结果,它在SSMS的结果视图中呈现为十六进制字符串,如0x680065006C006C006F002C0077006F0072006C006400 -- 但它仍然是一个二进制值,其他程序将不会将其视为字符串。 - Ross Presser
此外,用户询问的是Informix而不是SQL Server。 - Ross Presser

1

试试这个:

select convert(varbinary, '0xa3c0', 1)

十六进制数需要有偶数位数字。为了解决这个问题,可以尝试:
select convert(varbinary, '0x' +  RIGHT('00000000' + REPLACE('0xa3c','0x',''), 8), 1)

0
SUBSTRING(CONVERT(varbinary,Addr1 ) ,1,1) as Expr1

0

如果您在代码中的数据库客户端可以完成此操作,那么可能会更容易。

否则,错误可能意味着内置的十六进制函数无法按照您的预期使用您的值。我会先检查输入值是否修剪并以格式为首,这可能很简单。然后,我会咨询描述十六进制函数的数据库文档,了解其预期输入是什么,并将其与一些值进行比较,找出差异以及如何更改您的值以匹配所需的输入。

一个简单的谷歌搜索“informix hex function”带来了第一页的第一条结果:“必须是文字整数或返回整数的其他表达式”。如果您的数据类型是字符串,请先将字符串转换为整数。乍一看,似乎您要使用转换函数(我不确定)。

select hex(cast SomeStringColumn as int)) from SomeTable

很遗憾,您的解决方案只适用于字符串确实是数字的情况,而这并不是我的情况... - Claude Houle

0

0

老帖子了,但在我的情况下,我还必须删除十六进制数的0x部分,所以我使用了下面的代码。(我正在使用MS SQL)

convert(varchar, convert(Varbinary(MAX), YOURSTRING),2)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接