如何用T-SQL将16进制转换成字符串?(内附微软技术人员的解答)
DD88 2006-02-28 10:55:37 今天碰到一个问题,要将10进制转换成16进制,然后再将16进制转换成字符串进行处理。
10进制->16进制我使用cast进行转换:
cast(123 as varbinary)
但是在16进制->字符类型的时候遇到了问题。
不论是直接赋值还是通过convert或者cast赋值都没有用,print出来的字符串变量总是为空(好像没有赋进去,但是也没有报错)。而SQL SERVER 2000的帮助上说的十六进制->字符串是可以的,不过需要显示转换。
我搞了1个多小时没搞定,最后不得不求助于微软的技术支持,解答如下:
尊敬的客户:
您好。感谢您致电微软技术支持,我是微软数据库技术支持工程师,我姓李。
关于二进制转换为十六进制字符串的功能,目前T-SQL中您可以这样实现,请参阅以下代码
=============
declare @binvalue varbinary(255)
declare @charvalue varchar(255)
declare @i int
declare @length int
declare @hexstring char(16)
select @binvalue = @@dbts --这里用系统时间戳的二进制值为例
select @charvalue = '0x'
select @i = 1
select @length = datalength(@binvalue)
select @hexstring = '0123456789abcdef'
while (@i <= @length)
begin
declare @tempint int
declare @firstint int
declare @secondint int
select @tempint = convert(int, substring(@binvalue,@i,1))
select @firstint = floor(@tempint/16)
select @secondint = @tempint - (@firstint*16)
select @charvalue = @charvalue +
substring(@hexstring, @firstint+1, 1) +
substring(@hexstring, @secondint+1, 1)
select @i = @i + 1
end
select 'hexadecimal'=@charvalue
基本就是通过字符位操作,完成了十六进制->字符串的转换。
帮助上说的需要“显示转换”难道就是这种方法?不知道各位老大是不是还有更好的方法?这样操作实在是没有办法的办法了。