关于N进制数据计算SQL原生处理
来源:互联网 发布:2017重庆最美工商人 编辑:程序博客网 时间:2024/06/02 05:34
本文是因为看了这个帖子有感而发
http://bbs.csdn.net/topics/392295261
楼主要求:获取34进制的流水码的函数或者存储过程,0..9 A..Z 去掉IO,一共四位,每次调用增加1.
这个帖子激起了我兴趣,下面提供一个泛化的处理方式,所谓泛化指进制数任意,进制中的符号任意,函数如下:
if Object_id('NInc')is not nulldrop function NIncgo--@NCode进制码表,例如:我们熟悉的16进制为"0123456789ABCDEF",也可以自定义特殊的进制,例如三进制"ABC",这样计算就会有A+1=B,B+1=C,C+1=BA,是不是很神奇?--@NNum 表示参与运算的N进制数 ,@Num参与运算的10十进制数create function NInc(@NCode varchar(100),@NNum varchar(10),@Num int)returns varchar(10)asBEGINdeclare @N int,@i int,@idx int,@str varchar(20)--N进制转十进制,同时+@Num select @N=len(@NCode),@i=0,@NNum=reverse(@NNum) while @i<len(@NNum) begin set @idx=charindex(substring(@NNum,@i+1,1),@NCode)-1 set @Num=@Num+ @idx*power(@N,@i) set @i=@i+1 endset @str=''--十进制转N进制 while @Num<>0beginselect @str=substring(@NCode,(@Num % @n)+1,1)+@strset @Num=@Num/@N endif @Num=0 and @str='' set @str=Left(@NCode,1) return @str ENDgo
测试:
select A=dbo.Ninc('0123456789ABCDEF','F',1),B=dbo.Ninc('0123456789ABCDEF','1B',1)
返回
A B
---------- ----------
10 1C
是我们需要的结果
再试一下特殊码表的运算:
select c1=dbo.Ninc('abc','a',1),c2=dbo.NInc('abc','c',1),c3=dbo.NInc('abc','c',2)
返回
c1 c2 c3
---------- ---------- ----------
b ba bb
完美实现基于abc符号的三进制运算
阅读全文
0 0
- 关于N进制数据计算SQL原生处理
- HIBERNATE对原生SQL的处理
- Guava处理原生类型的数据
- 关于oracle的原生sql排序分页
- python django 原生sql 获取数据
- 关于MS SQL Server中DATETIME类型数据的处理
- 关于transaction(C#/SQL-Server),批量处理数据
- 处理大整数------计算n!(阶层)
- 每N条数据计算一次平均值
- [SQL]计算N个月前,N个月后的方法
- SQL Server 原生数据从XML生成JSON数据
- SQL递归处理数据
- SQL处理重复数据
- SQL 处理数据 curd
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理
- hibernate使用原生SQL查询返回结果集的处理
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理
- 关于云计算的数据
- ubuntu conda install ERROR missing write permission error
- JavaScript学习-日期
- DAY4继续python入门
- Absolute 盘点8种CSS实现垂直居中水平居中的绝对定位居中技术
- 从开发小白到音视频专家
- 关于N进制数据计算SQL原生处理
- 距离变换
- FlashIDE+AirSDK,Window开发环境搭建
- Rxjava2操作符入门(一)
- Oracle 11g R2 安装
- 设置O_NONBLOCK
- Java语法小问题
- 《七点三刻》029期 余额宝日限购2万/C罗五夺金球奖/印无人机…
- LOJ6013「网络流 24 题