SQL 实现十进制数和十六进制字符串互相转换

 
0001 use master
0002 go
0003  
0004 if exists(select * from sysobjects where name = N'maker_fInt2Hex')
0005         drop function maker_fInt2Hex
0006 GO
0007 create function maker_fInt2Hex(@num bigint, @hexLength int)
0008         returns varchar(100)
0009 as 
0010 begin 
0011         declare @re varchar(100)
0012         declare @bn bigint, @tempLen int
0013         set @bn = @num
0014         set @re='' 
0015         ---------------------------------------- 
0016         while (@num>0)
0017                 begin 
0018                         set @re=substring('0123456789ABCDEF',@num%16+1,1)+@re
0019                         set @num=@num/16
0020                 end 
0021         ---------------------------------------- 
0022         set @tempLen = @hexLength - len(@re)
0023         while(@tempLen > 0) 
0024                 begin 
0025                         set @re = '0' + @re   
0026                         set @tempLen = @tempLen - 1  
0027                 end 
0028         return(@re)
0029 end 
0030 GO
0031  
0032 if exists(select * from sysobjects where name = N'maker_fHex2Int')
0033         drop function maker_fHex2Int
0034 GO
0035  
0036 create function maker_fHex2Int (@hexS varchar(16))
0037 returns bigint
0038 AS 
0039 begin 
0040         declare @i int, @result bigint, @len int
0041         declare @power bigint
0042         set @power = 16
0043         select @i = 0, @result = 0, @hexS = RTRIM(LTRIM(UPPER(@hexS)))
0044         set @len = len(@hexS) 
0045  
0046         if (@len = 16)
0047                 begin 
0048                         if (ascii(substring(@hexS, 1, 1)) > 55)
0049                                 begin 
0050                                         -- RaisError('超出数据运算范围', 1, 16) 
0051                                         return @result
0052                                 end 
0053                 end 
0054         ------------------------------------------------------- 
0055         while (@i < @len)
0056                 begin 
0057                         if ((substring(@hexS, @len - @i, 1) not between '0' and '9')
0058                                 AND 
0059                                 (substring(@hexS, @len - @i, 1) not between 'A' and 'F'))
0060                                 begin 
0061                                         set @result = 0
0062                                         break;
0063                                 end 
0064                         ---------------------------------------- 
0065  
0066                         set @result = @result + (charindex(substring(@hexS, @len - @i, 1), '0123456789ABCDEF') - 1) * cast(power(@power, @i) as bigint)
0067                         set @i = @i + 1                                
0068                 end 
0069         ---------------------------------------------- 
0070         return @result                                
0071 end  
0072 GO
0073  
0074 ---- 调用示例 
0075 select dbo.maker_fInt2Hex(19912939123,16)
0076 select dbo.maker_fHex2Int('7FFFFFFFFFFFFFFF')
0077 GO
0078 -- 结果 
0079 /* 
0080  00000004A2E75673 
0081  
0082 (所影响的行数为 1 行) 
0083  
0084                       
0085 --------------------  
0086  9223372036854775807  
0087  
0088 (所影响的行数为 1 行) 
0089 */ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
select number16,substring(number16,1,1) a,substring(number16,2,1) b, substring(number16,3,1) c, substring(number16,4,1) d, substring(number16,5,1) e,substring(number16,6,1) f, substring(number16,7,1) g, substring(number16,8,1) h, convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,1,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,7) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,2,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,6) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,3,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,5) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,4,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,4) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,5,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,3) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,6,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,2) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,7,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,1) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,8,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,0) from test_16to10 where len(number16)>6 -- create table test_16to10(number16 varchar(10) not null); --ex: number16 value is:'D95B7D3C'

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值