进制转换问题

kingmeta 2011-11-02 04:30:42
如:十六进制的0x1ab38e,怎么样直接转为varchar,而且要显示为'0x1ab38e'
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingmeta 2011-11-02
  • 打赏
  • 举报
回复
好的,谢谢了。结贴。
唐诗三百首 2011-11-02
  • 打赏
  • 举报
回复
据我所知没有.
kingmeta 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ap0405140 的回复:]
介绍一个有用的函数,

SQL code

declare @x varbinary(255)
select @x=0x1ab38e
select lower('0x'+dbo.Apq_ConvertVarBinary_HexStr(@x)) 'result'

result
----------
0x1ab38e


-- 函数Apq_ConvertVarBinary_……
[/Quote]

这个可以用,谢谢了。
不过有没有内置的方法?
唐诗三百首 2011-11-02
  • 打赏
  • 举报
回复
介绍一个有用的函数,

declare @x varbinary(255)
select @x=0x1ab38e
select lower('0x'+dbo.Apq_ConvertVarBinary_HexStr(@x)) 'result'

result
----------
0x1ab38e


-- 函数Apq_ConvertVarBinary_HexStr()代码如下
create FUNCTION dbo.Apq_ConvertVarBinary_HexStr
(
@bin varbinary(1000)
)
RETURNS varchar(1000)
AS
BEGIN
DECLARE @Return varchar(1000), @ind int, @byte binary(1),@byte1 int, @byte2 int;
SELECT @Return = '',@ind = 1;

WHILE ( @ind <= datalength(@bin) )
BEGIN
SELECT @byte = substring(@bin, @ind, 1);
SET @byte1 = @byte / 16
IF(@byte1 >= 10)
SELECT @Return = @Return +
CASE @byte1
WHEN 10 THEN 'A'
WHEN 11 THEN 'B'
WHEN 12 THEN 'C'
WHEN 13 THEN 'D'
WHEN 14 THEN 'E'
WHEN 15 THEN 'F'
END
ELSE
SELECT @Return = @Return + convert(char(1),@byte1)

SET @byte2 = @byte % 16
IF(@byte2 >= 10)
SELECT @Return = @Return +
CASE @byte2
WHEN 10 THEN 'A'
WHEN 11 THEN 'B'
WHEN 12 THEN 'C'
WHEN 13 THEN 'D'
WHEN 14 THEN 'E'
WHEN 15 THEN 'F'
END
ELSE
SELECT @Return = @Return + convert(char(1),@byte2)

SELECT @ind = @ind + 1;
END

RETURN @Return;
END
GO
kingmeta 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
cast(cast('0x1ab38e' as varbinary) as varchar(max))
[/Quote]

试了不行
--小F-- 2011-11-02
  • 打赏
  • 举报
回复
cast(cast('0x1ab38e' as varbinary) as varchar(max))
中国风 2011-11-02
  • 打赏
  • 举报
回复
你傳參時加了引號會是字符

中国风 2011-11-02
  • 打赏
  • 举报
回复
怎樣的效果?

34,594

社区成员

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

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