我正在寻找一种方法将真正的字符串转换为SQL中的十六进制值。我正在寻找一些Informix友好的东西,但我显然更喜欢数据库中立的东西
以下是我现在正在使用的选项:
SELECT SomeStringColumn from SomeTable
这是我想要使用的选择: 从SomeTable中选择hex(SomeStringColumn)
不幸的是没有什么是那么简单...... Informix给了我这样的信息: 数字转换错误的字符
有什么想法吗?
答案 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)
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)