12

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

这是我现在使用的选择:

SELECT SomeStringColumn from SomeTable

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

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

任何想法?

4

6 回答 6

20

你可以使用 Cast 和 fn_varbintohexstr 吗?

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

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

我刚刚在我的一张表上的 SQL Server 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
于 2008-10-20T17:55:37.980 回答
9

以下适用于 Sql 2005。

select convert(varbinary, SomeStringColumn) from SomeTable
于 2009-10-28T14:53:28.543 回答
0

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

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

一个简单的谷歌搜索“informix hex function”打开了第一个结果页面,其中包含以下句子:“必须是文字整数或其他返回整数的表达式”。如果您的数据类型是字符串,请先将字符串转换为整数。乍一看,您似乎使用 cast 函数做了一些事情(我对此不确定)。

select hex(cast SomeStringColumn as int)) from SomeTable
于 2008-10-20T17:59:49.500 回答
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

抱歉,仅适用于 >MS SQL 2005

于 2012-01-19T16:30:25.713 回答
0

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

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

于 2017-05-04T00:26:44.807 回答
0

尝试这个:

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

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

select convert(varbinary, '0x' +  RIGHT('00000000' + REPLACE('0xa3c','0x',''), 8), 1)
于 2021-04-25T03:00:54.247 回答