最近工控项目中遇到的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

SQLSERVER 16进制与10进制转换的更多相关文章

  1. delphi 中字符串与16进制、10进制转换函数

      //字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...

  2. PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到.   可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有 ...

  3. 16进制转10进制 HDU-1720

    A+B Coming Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. golang中字符串、数值、2进制、8进制、16进制、10进制、日期和字符串之间的转换

    package main import ( "fmt" "reflect" "strconv" "time" ) fun ...

  5. HDU 4278 Faulty Odometer 8进制转10进制

    Faulty Odometer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  6. php 36进制与10进制转换

    php 36进制与10进制转换 /** * @desc im:十进制数转换成三十六机制数 * @param (int)$num 十进制数 * return 返回:三十六进制数 */ function ...

  7. SQLSERVER 16进制转10进制

    原码.补码.反码参考: http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 进制转换参考: http://ww ...

  8. python中2进制、10进制、16进制等之间的转换

    10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...

  9. js 解密 16进制转10进制,再取ascii码的对应值

    如:\x64 对应 16进制 0x64 转10进制就是 0x64.toString(10) == 100, 查对应的ascii码表得到 ‘d' <div id=code style='displ ...

随机推荐

  1. extjs 2.0获取选中的radio的值

    var temp=winFormPanel.getForm().findField('selectedType').getGroupValue();

  2. kmp 和boyer-moore

    <html> <head> <meta http-equiv="content-type" content="text/html; char ...

  3. javascript,HTML,PHP,ASP做301跳转代码 SEO优化设置

    URL HTTP Redirection URL http redirection is an automatic URL change operation from one URL to anoth ...

  4. eclipse生成jar包

    第一:普通类导出jar包,我说的普通类就是指此类包含main方法,并且没有用到别的jar包. 1.在eclipse中选择你要导出的类或者package,右击,选择Export子选项: 2.在弹出的对话 ...

  5. python 获取类的属性

    如果不清楚一个对象是否拥有某个属性,可以使用内置函数hasattr 访问一个对象的属性的方法是通过特别属性__dict__,它是一个映射,将属性名称映射到属性值 为了调试方便,可以添加下面这个函数 d ...

  6. linux 快捷键

    截图: 打印: 全屏截图 alt+打印:窗口截图 shift+打印:区域截图 ctrl+打印:截图到剪贴板 显示桌面: ctrl+super+d 最大化最小化窗口 ctrl+alt+up/down 转 ...

  7. spark Mllib SVM实例

    Mllib SVM实例 1.数据 数据格式为:标签, 特征1 特征2 特征3…… 0 128:51 129:159 130:253 131:159 132:50 155:48 156:238 157: ...

  8. Markdown基本用法

    Markdown基本用法 不同的编辑器对本文中的功能可能显示情况不一样,马克飞象可以完美支持和显示. 一.标题 h1标题 #h1标题 h1标题 h1标题 == h2标题 ##h2标题 h2标题 h2标 ...

  9. PHP 错误与异常 笔记与总结(8)自定义错误处理函数 set_error_handler()

    通过 Set_error_handler() 函数设置用户自定义的错误处理函数. 步骤: ① 创建错误处理函数 ② 设置不同级别调用函数 ③ Set_error_handler() 函数制定接管错误处 ...

  10. PHP程序员必须清楚的问题汇总

    PHP程序员必须清楚的问题汇总 投稿:hebedich 字体:[增加 减小] 类型:转载   这篇文章主要介绍了PHP程序员必须清楚的问题汇总,需要的朋友可以参考下     你是否正在准备寻找一份PH ...