最近工控项目中遇到的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
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, 二进制
, 进制
, 16进制
, 字符转16进制
, 10进制 16进制
, 负数
, 16进制字符串
, 正负数
, varchar
, 10进制转
, int转varchar
, bigint
bigint转int
sql server 进制转换、sqlserver 16进制、sql server 16进制、16进制转换成sql语句、sql server 二进制,以便于您获取更多的相关知识。