首页 > 代码库 > 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内的进制相互转换