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 AS
12 BEGIN
13     --可通过扩充@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 > 0
25     BEGIN
26         SET @digit = SUBSTRING(@seq, ((@value/@jz)%@jz)+1, 1)
27         SET @value = @value/@jz
28         IF @value <> 0 
29             SET @result = @digit + @result
30     END 
31     RETURN @result
32 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 BIGINT
12 AS
13 BEGIN
14     DECLARE @result BIGINT
15     DECLARE @ym VARCHAR(2000)    --掩码
16     SET @ym = 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?
17     DECLARE @i INT = LEN(@value) - 1
18     DECLARE @digit CHAR(1)
19     SET @result = (CHARINDEX(SUBSTRING(@value,LEN(@value),1),@ym)-1)
20     DECLARE @w INT
21     WHILE @i > 0
22     BEGIN
23         SET @digit = SUBSTRING(@value,@i,1)
24         SET @w = (CHARINDEX(@digit,@ym)-1) * POWER(@jz,(LEN(@value) - @i))
25         SET @result = @result + @w
26         SET @i = @i - 1
27     END 
28     RETURN @result
29 END

 

测试用例:

1 DECLARE @i BIGINT = 10000, @jz INT = 32
2 DECLARE @str VARCHAR(20) = dbo.BigIntToHexStr(@i,@jz)
3 PRINT 数字  + CAST(@i AS VARCHAR(20)) +  转换成 + CAST(@jz AS VARCHAR(2)) + 进制的结果为: + @str
4 DECLARE @r BIGINT =dbo.HexStrToBigInt(@str,@jz)
5 PRINT CAST(@jz AS VARCHAR(2)) +进制的字符串  + @str +  转换成数字为: + CAST(@r AS VARCHAR(20))

测试结果:

数字 10000 转换成32进制的结果为: 9OG
32进制的字符串 9OG 转换成数字为:10000

测试环境

Windows 7 x64 + SQL Server 2008 Express R2

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。