• 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

  • 相关阅读:
    制作USB启动盘
    Custom Content and Formatting 富文本框批量上传 quill
    “从特殊到一般”的思想
    每个元素应该有 相同的概率 被返回。
    前缀和
    graphql 案例
    电脑关机后怎么计算时间 CMOS电池 时钟芯片 晶体振荡器 晶振 时钟晶振 谐振电容
    前端质量|基于业务驱动的前端性能有效实践案例
    Pull or Push
    分区表出现错误 分区错误
  • 原文地址:https://www.cnblogs.com/bwch_xm/p/4001522.html
Copyright © 2020-2023  润新知