SQL SERVER 16进制与10进制转换 - MSSQL教程
发布时间:2014-03-23 18:34:27 所属栏目:MsSql教程 来源:站长网
导读:最近工控项目中遇到的16进制与10进制转换,在.NET中比较容易实现,在SQLSERVER中发现没有直接 的转换,尤其是出现超出范围的long负数,即无符号64位整数在sqlse
最近工控项目中遇到的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 (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读