我有一个表示十六进制值的字符串列,例如 -
'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))
我实际上用0或2填充字符串以使其长度均匀,并添加'0x'
前缀。但是一些(随机)行失败。
还有另一种转换价值的方法吗?
感谢。
答案 0 :(得分: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)