首页 > 代码库 > sql 进制转换,支持93内的进制相互转换
sql 进制转换,支持93内的进制相互转换
功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充
1 -- ============================================= 2 -- Author: bwch 3 -- Create date: 2014年9月30日10:32:47 4 -- Description: 把一个数字转换成指定进制,最大支持93进制,也可在Function内扩充@ym实现其他的转换 5 -- ============================================= 6 ALTER FUNCTION [dbo].[BigIntToHexStr]( 7 @value BIGINT, --需要转换的数字 8 @jz INT = 16 --默认16进制 9 )10 RETURNS VARCHAR(50) --返回值,进制转换后的字符串11 AS12 BEGIN13 --可通过扩充@ym扩充其他的进制14 DECLARE @seq VARCHAR(2000) --字符掩码15 DECLARE @ym VARCHAR(2000) --掩码16 SET @ym = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?‘17 SET @seq = SUBSTRING(@ym,1,@jz)18 --返回值19 DECLARE @result VARCHAR(50)20 --取数字的字符21 DECLARE @digit CHAR(1)22 SET @result = SUBSTRING(@seq, (@value%@jz)+1, 1)23 24 WHILE @value > 025 BEGIN26 SET @digit = SUBSTRING(@seq, ((@value/@jz)%@jz)+1, 1)27 SET @value = @value/@jz28 IF @value <> 0 29 SET @result = @digit + @result30 END 31 RETURN @result32 END
1 -- ============================================= 2 -- Author: bwch 3 -- Create date: 2014年9月30日10:36:14 4 -- Description: 把转换过的进制转换成数字 5 -- ============================================= 6 ALTER FUNCTION [dbo].[HexStrToBigInt] 7 ( 8 @value VARCHAR(20), --转换过的字符串 9 @jz INT = 16 --进制,默认16进制10 )11 RETURNS BIGINT12 AS13 BEGIN14 DECLARE @result BIGINT15 DECLARE @ym VARCHAR(2000) --掩码16 SET @ym = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?‘17 DECLARE @i INT = LEN(@value) - 118 DECLARE @digit CHAR(1)19 SET @result = (CHARINDEX(SUBSTRING(@value,LEN(@value),1),@ym)-1)20 DECLARE @w INT21 WHILE @i > 022 BEGIN23 SET @digit = SUBSTRING(@value,@i,1)24 SET @w = (CHARINDEX(@digit,@ym)-1) * POWER(@jz,(LEN(@value) - @i))25 SET @result = @result + @w26 SET @i = @i - 127 END 28 RETURN @result29 END
测试用例:
1 DECLARE @i BIGINT = 10000, @jz INT = 322 DECLARE @str VARCHAR(20) = dbo.BigIntToHexStr(@i,@jz)3 PRINT ‘数字 ‘ + CAST(@i AS VARCHAR(20)) + ‘ 转换成‘ + CAST(@jz AS VARCHAR(2)) + ‘进制的结果为: ‘+ @str4 DECLARE @r BIGINT =dbo.HexStrToBigInt(@str,@jz)5 PRINT CAST(@jz AS VARCHAR(2)) +‘进制的字符串 ‘ + @str + ‘ 转换成数字为:‘ + CAST(@r AS VARCHAR(20))
测试结果:
数字 10000 转换成32进制的结果为: 9OG32进制的字符串 9OG 转换成数字为:10000
测试环境
Windows 7 x64 + SQL Server 2008 Express R2
sql 进制转换,支持93内的进制相互转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。