SQLSERVER 16进制与10进制转换
2014-01-06 17:11
375 查看
原文 SQLSERVER 16进制与10进制转换
最近工控项目中遇到的16进制与10进制转换,在.NET中比较容易实现,在SQLSERVER中发现没有直接的转换,尤其是出现超出范围的long负数,即无符号64位整数在sqlserver中的存储。网上找的很多方法只适用于32位整数和64位正整数,64位负数无法实现,现将使用的转换方法记录下来。
利用SQLSERVER中的varbinary来间接实现。
16进制字符串转10进制bigint(0-FFFFFFFFFFFFFFFF):
由于二进制比较容易转换为bigint 所以先将字符串转为二进制varbinary,再转换为10进制
10进制转16进制字符串(bigint正负数都可以):相同的思路目前可以将二进制varbinary转换为字符串比较容易,那么先将10进制转二进制再进行16进制字符串输出
以上代码测试环境WIN2003+SQLSERVER2008
最近工控项目中遇到的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
相关文章推荐
- ORACLE查看用户定义的函数及源码
- Redis Sentinel集群方案--单机测试
- 无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决
- ERROR 1148 (42000): The used command is not allowed with this MySQL version
- mysql集群 配置Keepalived+mm
- 创建oracle 口令文件
- 日常整理oracel sql
- Mysql错误:Duplicate entry '127' for key 'PRIMARY'的解决方法
- sql里insert是没有where字句
- 数据库配置信息
- Exception in thread "main" java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection cannot be
- sql 查询数据为NULL的值
- 如何查看Oracle数据库连接情况
- 1.数据库表修复
- oralce服务器关机重启后报内存错误,并无法连接数据库ora-12154
- 关于oracle dblink 使scn 增加
- MySql命令行基本操作
- MySQLdb 连接Mysql 数据库出错解决
- SQLServer查询多行转换为一行的方法
- java实现oracle数据库连接