停止T-SQL将Hex转换为ASCII

时间:2016-01-27 10:59:12

标签: tsql sql-server-2008-r2 hex ascii

我正在尝试从INT中获取修剪后的十六进制值。 我目前正在将INT转换为Hex而没有使用麻烦;

convert(varbinary(1),43) --This is creating a 0x2B result

我想只显示值2B 当我进行任何类型的转换到VARCHAR(),通过强制转换或甚至通过right(),十六进制转换为ASCII字符然后我不能用它做任何事情。

有没有人知道在删除前导0x时保留HEX值的方法?

2 个答案:

答案 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 );

延长范围留给读者练习。