1

- などの 16 進値を表す文字列列があります
'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'接頭辞を追加しています。ただし、一部の (ランダムな) 行は失敗します。値を変換する別の方法はありますか?

ありがとう。

4

1 に答える 1

3

回答を改善できるように、フィードバックをお寄せください。これを行う 1 つの方法を次に示します。

//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 に答える