1

我有一个表示十六进制值的字符串列,例如 -
'274', '1A7', '3D1' and so on

现在我需要将这些值转换为它们的整数值,例如,'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)) 

我实际上用零或两个填充字符串以使其长度均匀,并添加'0x'前缀。然而,一些(随机)行失败。还有另一种方法来转换值吗?

谢谢。

4

1 回答 1

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)
,@i=@len
,@output=case
when @len>0
then 0
end
while (@i>0)
begin
select @char=substring(@str,@i,1), @output=@output
+(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.,@len-@i)
,@i=@i-1
end
return @output
end

或者

SELECT CONVERT(INT, 0×00000100)
SELECT CONVERT(VARBINARY(8), 256)
于 2013-10-17T07:22:36.293 回答