SQLSERVER 16进制与10进制转换

本文介绍了如何在SQLServer中实现16进制与10进制之间的转换,包括处理超出范围的long负数及无符号64位整数的存储问题。提供了一个通过使用varbinary类型间接实现转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文 SQLSERVER 16进制与10进制转换

最近工控项目中遇到的16进制与10进制转换,在.NET中比较容易实现,在SQLSERVER中发现没有直接的转换,尤其是出现超出范围的long负数,即无符号64位整数在sqlserver中的存储。网上找的很多方法只适用于32位整数和64位正整数,64位负数无法实现,现将使用的转换方法记录下来。

利用SQLSERVER中的varbinary来间接实现。

16进制字符串转10进制bigint(0-FFFFFFFFFFFFFFFF):

由于二进制比较容易转换为bigint 所以先将字符串转为二进制varbinary,再转换为10进制

复制代码
CREATE  function [dbo].[hextoint](@s varchar(16)) 
returns bigint  
begin 
 declare @result bigint
 set @result=CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + @s AS char), 1))--最简单有效的方法
 return @result
END

GO
复制代码

 

10进制转16进制字符串(bigint正负数都可以):相同的思路目前可以将二进制varbinary转换为字符串比较容易,那么先将10进制转二进制再进行16进制字符串输出

复制代码
CREATE   function [dbo].[inttohex](@num bigint) 
returns varchar(16)  
begin 
declare @num2 varbinary(8),@r varchar(50)
set @num2=convert(varbinary(8),@num)--直接转换为二进制
set @r= dbo.varbin2hexstr(@num2)--二进制转16进制字符串
return @r 
end 

GO
复制代码
复制代码
 CREATE function [dbo].[varbin2hexstr](
    @bin varbinary(8000)
    )returns varchar(8000)
    as
    begin
        declare @re varchar(8000),@i int
        select @re='',@i=datalength(@bin)
        while @i>0
            select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
                    +substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
                    +@re
                ,@i=@i-1
       -- return('0x'+@re)
        return @re
    end
    

GO
复制代码

以上代码测试环境WIN2003+SQLSERVER2008

posted on 2014-01-06 17:11 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3507595.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值