日期:2014-05-18  浏览次数:20490 次

我想在SQLserver中实现一个函数,能够将10进制转化为36进制
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,能不能实现,特此请教。
比如     135   对应的为3R

------解决方案--------------------
--写成了两个函数,看起来清晰点

--一位转换函数
create function fn_36 (
@i int
)
returns varchar(1)
as
begin
return (case when @i <10 then cast(@i as varchar)
else char(ascii( 'A ')+@i-10) end)
end
go


--转换函数
create function fn_10to36 (
@i int
)
returns varchar(30)
as
begin

declare @r varchar(30)
set @r= ' '

declare @m int
declare @s int
set @s=@i
while @s> 36
begin
set @m=@s % 36
set @r=@r+dbo.fn_36(@m)
set @s=@s/36
end
if @s> 0
set @r=@r+dbo.fn_36(@s)
return @r
end

go

--调用测试
select dbo.fn_10to36(135)
--结果
------------------------------
R3

(1 行受影响)

select dbo.fn_10to36(65535)
--结果
------------------------------
FKE1

(1 行受影响)