2013-10-17 46 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

相關問題