我正在尝试从INT中获取修剪后的十六进制值。 我目前正在将INT转换为Hex而没有使用麻烦;
convert(varbinary(1),43) --This is creating a 0x2B result
我想只显示值2B 当我进行任何类型的转换到VARCHAR(),通过强制转换或甚至通过right(),十六进制转换为ASCII字符然后我不能用它做任何事情。
有没有人知道在删除前导0x时保留HEX值的方法?
答案 0 :(得分:1)
修改强>
您可以使用内置函数,如下所示:
select
RIGHT(sys.fn_varbintohexstr(convert(varbinary(1),43)),LEN(sys.fn_varbintohexstr(convert(varbinary(1),43)))-CHARINDEX('x',sys.fn_varbintohexstr(convert(varbinary(1),43))))
答案 1 :(得分:1)
如果值在0到255范围内,您可以使用强力:
-- One value.
declare @VB as VarBinary(1) = 43;
select @VB as [VarBinary], Substring( '0123456789ABCDEF', Ascii( @VB ) / 16 + 1, 1 ) + Substring( '0123456789ABCDEF', Ascii( @VB ) & 15 + 1, 1 ) as [Hex];
-- Test the range 0 to 255.
with Numbers as (
select 0 as Number
union all
select Number + 1
from Numbers
where Number < 255 ),
NumbersWithVarBinary as (
select Number, Cast( Number as VarBinary(1) ) as VB
from Numbers )
select VB as [VarBinary], Substring( '0123456789ABCDEF', Ascii( VB ) / 16 + 1, 1 ) + Substring( '0123456789ABCDEF', Ascii( VB ) & 15 + 1, 1 ) as [Hex]
from NumbersWithVarBinary
option ( MaxRecursion 0 );
延长范围留给读者练习。