sql 进制转换,支持93内的进制相互转换
2014-09-30 10:45
281 查看
功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充
测试用例:
测试结果:
测试环境
Windows 7 x64 + SQL Server 2008 Express R2
-- ============================================= -- Author: bwch -- Create date: 2014年9月30日10:32:47 -- Description: 把一个数字转换成指定进制,最大支持93进制,也可在Function内扩充@ym实现其他的转换 -- ============================================= ALTER FUNCTION [dbo].[BigIntToHexStr]( @value BIGINT, --需要转换的数字 @jz INT = 16 --默认16进制 ) RETURNS VARCHAR(50) --返回值,进制转换后的字符串 AS BEGIN --可通过扩充@ym扩充其他的进制 DECLARE @seq VARCHAR(2000) --字符掩码 DECLARE @ym VARCHAR(2000) --掩码 SET @ym = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?' SET @seq = SUBSTRING(@ym,1,@jz) --返回值 DECLARE @result VARCHAR(50) --取数字的字符 DECLARE @digit CHAR(1) SET @result = SUBSTRING(@seq, (@value%@jz)+1, 1) WHILE @value > 0 BEGIN SET @digit = SUBSTRING(@seq, ((@value/@jz)%@jz)+1, 1) SET @value = @value/@jz IF @value <> 0 SET @result = @digit + @result END RETURN @result END
-- ============================================= -- Author: bwch -- Create date: 2014年9月30日10:36:14 -- Description: 把转换过的进制转换成数字 -- ============================================= ALTER FUNCTION [dbo].[HexStrToBigInt] ( @value VARCHAR(20), --转换过的字符串 @jz INT = 16 --进制,默认16进制 ) RETURNS BIGINT AS BEGIN DECLARE @result BIGINT DECLARE @ym VARCHAR(2000) --掩码 SET @ym = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`~!@#$%^&*()-_=+[]{}\|;:",.<>/?' DECLARE @i INT = LEN(@value) - 1 DECLARE @digit CHAR(1) SET @result = (CHARINDEX(SUBSTRING(@value,LEN(@value),1),@ym)-1) DECLARE @w INT WHILE @i > 0 BEGIN SET @digit = SUBSTRING(@value,@i,1) SET @w = (CHARINDEX(@digit,@ym)-1) * POWER(@jz,(LEN(@value) - @i)) SET @result = @result + @w SET @i = @i - 1 END RETURN @result END
测试用例:
DECLARE @i BIGINT = 10000, @jz INT = 32 DECLARE @str VARCHAR(20) = dbo.BigIntToHexStr(@i,@jz) PRINT '数字 ' + CAST(@i AS VARCHAR(20)) + ' 转换成' + CAST(@jz AS VARCHAR(2)) + '进制的结果为: '+ @str DECLARE @r BIGINT =dbo.HexStrToBigInt(@str,@jz) 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
相关文章推荐
- PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]
- PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
- 给Blog加上了Javascript的万年历,支持公、农历相互转换
- VB 各种进制相互转换大全
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
- 巧用一条SQL 实现其它进制到十进制转换
- VB 各种进制相互转换大全(二)
- 2到36进制之间的相互转换
- C# 10进制与16进制相互转换
- vc 10进制与2 8 16进制相互转换
- explicit和implicit属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换。
- 巧用一条SQL语句实现其它进制到十进制转换
- VC++ 中实现进制2进制,10进制,16进制的相互转换
- C# 各种进制之间相互转换
- 一条SQL语句实现其它进制到十进制转换
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
- VB 各种进制相互转换大全
- C# 各种进制之间相互转换
- 巧用一条SQL 实现其它进制到十进制转换
- VB 各种进制相互转换大全(一)