在SQL中将字符串转换为HEX

时间:2008-10-20 17:33:54

标签: sql informix hex

我正在寻找一种方法将真正的字符串转换为SQL中的十六进制值。我正在寻找一些Informix友好的东西,但我显然更喜欢数据库中立的东西

以下是我现在正在使用的选项:

SELECT SomeStringColumn from SomeTable

这是我想要使用的选择:     从SomeTable中选择hex(SomeStringColumn)

不幸的是没有什么是那么简单...... Informix给了我这样的信息: 数字转换错误的字符

有什么想法吗?

5 个答案:

答案 0 :(得分:18)

你可以使用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

答案 1 :(得分:0)

如果您可以在代码中的数据库客户端中执行此操作,则可能更容易。

否则错误可能意味着内置的十六进制函数无法按预期使用您的值。我会仔细检查输入值是否被修剪,并且首先采用格式,可能就是这么简单。然后我会查阅描述十六进制函数的数据库文档,看看它的预期输入是什么,并将其与一些值进行比较,找出差异是什么以及如何更改值以匹配预期输入的值。 / p>

一个简单的谷歌搜索“informix十六进制函数”带来了第一个结果页面的句子:“必须是一个文字整数或一些返回整数的表达式”。如果您的数据类型是字符串,请首先将字符串转换为整数。看起来乍一看你用cast函数做了一些事情(我不确定)。

select hex(cast SomeStringColumn as int)) from SomeTable

答案 2 :(得分:0)

怎么样:

declare @hexstring varchar(max);
set @hexstring = 'E0F0C0';
select cast('' as xml).value('xs:hexBinary( substring(sql:variable("@hexstring"), sql:column("t.pos")) )', 'varbinary(max)')
from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos)

我在这里看到了这个: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

Sorrry,仅适用于> MS SQL 2005

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

试试这个:

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

十六进制数需要有偶数位数。要解决这个问题,请尝试:

select convert(varbinary, '0x' +  RIGHT('00000000' + REPLACE('0xa3c','0x',''), 8), 1)