SQL内标量函数实现进制转化

前几天的开发遇到一个进制转化问题,在外部程序去实现要把大量数据抓出来,然后再处理,然后就想到了干脆在sql中使用标量函数来搞定他;根据自身业务需求就搞了这么一个,测试么问题。

当然该段代码是根据我们自身程序需求设计的,不算完全通用的进制转化;也可以自己修改一下变为通用;

话不多说,上代码:

ALTER FUNCTION [dbo].[f_tm_lsh]
	--  这个应该可以转化 32位以及 以下的进制所有的,2、4、8、10、16、32进制
	--	使用举例:
	--		select dbo.f_tm_lsh('1125','',10,16)
	--		select dbo.f_tm_lsh('1125','',16,2)
	--		select dbo.f_tm_lsh('G3011347624064910626007U','G3011347624064910626',32,10)
(
	@barcode varchar(250),		-- 条码段
	@regulation varchar(250),	-- 条码规则段
	@carryBit_BT	int,		-- 进制(转化前 Before transform)
	@carryBit_AT	int			-- 进制(转化前 After transform)
)
RETURNS varchar(255)
AS
BEGIN
	declare @jg as varchar(255)			 
	declare @jg10 as int				 
	declare @jzm as varchar(32)			 
	declare @ls as varchar(100)			 
	declare @index as int				 
	declare @base_BT as varchar(1)		 
	declare @base10	as int				 
	declare @base_AT as varchar(1)		 

	set @jzm ='0123456789ABCDEFGHJKLMNPQRTUVWXY'

	IF  @carryBit_BT in(2,4,8,10,16,32) 
		BEGIN
			set @jg10 = 0
			set @ls = right(@barcode, len(@barcode)-len(@regulation))
			set @index = 1

			while @index <= len(@ls)
				begin
					set @base_BT = SUBSTRING(@ls,@index,1)
					set @base10 = charindex(@base_BT,@jzm)-1
					set @jg10 = @jg10 + @base10 * power(@carryBit_BT,len(@ls)-@index)
					set @index = @index+1
				end
		END

	IF @carryBit_AT in(2,4,8,10,16,32)
		BEGIN
			SET @jg = SUBSTRING(@jzm, @jg10 % @carryBit_AT + 1,1)

			while @jg10 > 0
				begin
					set @base_AT = SUBSTRING(@jzm, ((@jg10 / @carryBit_AT) % @carryBit_AT)+1, 1)
					set @jg10 = @jg10 / @carryBit_AT
					if @jg10 <> 0
						set @jg = @base_AT + @jg
				end
		END

	return @jg
END

有用到的兄弟姐妹,别忘了点赞关注!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pypup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值