2013-10-17 48 views
1

我有一个表示十六进制值的字符串列,例如 -
'274', '1A7', '3D1' and so onSQL服务器将十六进制字符串转换为varbinary

现在我需要将这些值转换为它们的整数值,例如'10'将被转换为16。

的代码我使用:

SELECT CONVERT(int, CONVERT(varbinary, '0x' + case when replicate('0', len(myHex)/2) +  myHex = '0' then '00' else replicate('0', len(myHex)/2) + myHex end, 1)) 

我实际上填充字符串以0或2使它的长度均匀,并添加'0x'前缀。但是有些(随机)行失败。 是否有另一种方法来转换值?

谢谢。

回答

3

请给予反馈 ,这样我可以提高我的回答 下面是做到这一点的一种方法:

//create function fn_HexToIntnt(@str varchar(16)) 
//returns bigint as begin 

select @str=upper(@str) 
declare @i int, @len int, @char char(1), @output bigint 
select @len=len(@str) 
,@[email protected] 
,@output=case 
when @len>0 
then 0 
end 
while (@i>0) 
begin 
select @char=substring(@str,@i,1), @[email protected] 
+(ASCII(@char) 
-(case 
when @char between ‘A’ and ‘F’ 
then 55 
else 
case 
when @char between ’0′ and ’9′ 
then 48 end 
end)) 
*power(16.,@[email protected]) 
,@[email protected] 
end 
return @output 
end 

SELECT CONVERT(INT, 0×00000100) 
SELECT CONVERT(VARBINARY(8), 256) 
+0

这是十六进制转换成十进制的方式 – user2881430

相关问题