如何用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

基本就是通过字符位操作,完成了十六进制->字符串的转换。

帮助上说的需要“显示转换”难道就是这种方法?不知道各位老大是不是还有更好的方法?这样操作实在是没有办法的办法了。


...全文
644 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbsql 2006-02-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/pbsql/archive/2006/01/05/571385.aspx

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧