36进制数的加法运算

论坛上有人提出用36进制进行加法运算,而且要求一定得用 SQL 语句写,其36进制即采用0-9,a-z这36个符号表示数值,试着写了玩儿:

--创建字符转换为数值的函数
create function cton36
(@s varchar(12))
returns bigint
as
begin
declare @n bigint
set @s=upper(@s)
select @n=isnull(@n,0)+
(case when ascii(right(@s,number+1))>=65 then ascii(right(@s,number+1))-55 else ascii(right(@s,number+1))-48 end)*power(convert(bigint,36),number)
from master..spt_values where type='p' and number<len(@s)
return @n
end
go
--创建数值到字符的转换函数
create function ntoc36
(@n bigint)
returns varchar(12)
as
begin
declare @s varchar(12)
set @s=''
while @n>0
begin
    set @s=char(case when @n%36<10 then 48+@n%36 else 55+@n%36 end)+@s
    set @n=@n/36
end
return @s
end
go
--运算
select dbo.ntoc36(dbo.cton36('f87q3jds9')+dbo.cton36('437dz'))
/*
------------
F87Q7ML68

(1 行受影响)
*/
go
--删除自定义函数
drop function dbo.cton36,dbo.ntoc36
--说明:受 bigint 最大数值的限制,上述转换字符数最长不超过 12 位.

因为bigint数据类型最多只能容纳'zzzzzzzzzzzz'转换的值,再大就溢出了(并不会提示出错),因此上述转换如果位数大的话,不能相乘再转回去。当然数值小的时候是可以的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值