MS SQL Server10进制和16进制之间的互相转换
来源:互联网 发布:dt大数据梦工厂 spark 编辑:程序博客网 时间:2024/06/05 00:27
MS SQL Server10进制和16进制之间的互相转换
在MS SQLServer中常常需要用到10进制和16进制之间的互相转换,下面来总结一下。这里会涉及到CONVERT函数:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
一、 十进制转换为十六进制
这个比较简单。可以利用CONVERT函数,如下:
SELECT CONVERT(VARBINARY, 988)
--返回0x000003DC
二、 十六进制转换为十进制
按理说,这个和上面一样,也比较简单:
DECLARE @VAR VARBINARY(100)
SELECT @VAR= CONVERT(VARBINARY, 988)
SELECT CONVERT(INT,@VAR)
--返回 988
但是在实际操作过程中,十六进制数常常是以字符串表示的,这个就比较麻烦了。
SELECT CONVERT(VARBINARY,'0X1')
--返回0x305831
它只是将字符串的ASCII码返回给十六进制数。所以想要正确转换,必须要用UDF函数。在MS SQL Server2008开始,CONVERT函数对VARBINARY提供了一个参数,用于转换十六进制。下面分别说明:
1. MS SQL Server2008之前版本
就像刚才说的必须使用UDF函数。
CREATE FUNCTION BigInt2HexStr(@valueBIGINT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @seq CHAR(16)
DECLARE @result VARCHAR(50)
DECLARE @digit CHAR(1)
SET @seq = '0123456789ABCDEF'
--求十进制的@value除以的余数,找到余数对应十六进制的值
SET @result = SUBSTRING(@seq, (@value%16)+1,1)
WHILE @value > 0
BEGIN
SET @digit = SUBSTRING(@seq, ((@value/16)%16)+1,1)
SET @value = @value/16
IF @value <> 0
SET @result = @digit+ @result
END
RETURN @result
END
2. MS SQL Server2008及以后版本
CONVERT函数提供了一个style参数:
style值
输出
0(默认值)
l 将 ASCII 字符转换为二进制字节,或者将二进制字节转换为 ASCII 字符。每个字符或字节按照 1:1 进行转换。
l 如果 data_type 为二进制类型,则会在结果左侧添加字符 0x。
1, 2
l 如果 data_type 为二进制类型,则表达式必须为字符表达式。expression 必须由数量为偶数的十六进制数字(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、a、b、c、d、e、f)组成。如果将 style 设置为 1,字符 0x 必须为表达式中的前两个字符。如果表达式中包含的字符数为奇数或者包含任何无效的字符,则会引发错误。
l 如果转换后的表达式长度大于 data_type 长度,则会在右侧截断结果。
l 如果固定长度 data_types 大于转换后的结果,则会在结果右侧添加零。
l 如果 data_type 为字符类型,则表达式必须为二进制表达式。每个二进制字符均转换为两个十六进制字符。如果转换后的表达式长度大于 data_type 长度,则会在右侧截断结果。
l 如果 data_type 为固定大小的字符类型,并且转换后的结果长度小于其 data_type 长度,则会在转换后的表达式右侧添加空格,以使十六进制数字的个数保持为偶数。
l 对于 style 1,将在转换后的结果左侧添加字符 0x;而对于style2,则不添加字符0X。
利用这个参数,我们就可以非常方便地进行转换了:
SELECT CONVERT(INT,CONVERT(VARBINARY,'0X' + '12', 1))
--返回18
三、 参考文献
1. http://www.cnblogs.com/gaizai/p/4001016.html
- MS SQL Server10进制和16进制之间的互相转换
- SQL SERVER10进制与16进制互换
- 进制之间互相转换代码
- Java进制之间互相转换
- 2进制数据与图片之间的互相转换
- 字符串和16进制之间的互相转化
- Java的十六进制与字符串之间互相转换函数(16进制与String转换)
- JAVA实现二进制和16进制之间的互相转换,8进制同理,附带异或操作实现
- sql进制之间的转换
- 进制互相转换
- 各种进制的字符串与数值之间的互相转换
- 【黑马程序员】Java基础01:进制之间的互相转换
- 五分钟教会你任何进制之间的互相转换
- List和string之间的互相转换
- string和numeric之间的互相转换
- List和string之间的互相转换
- word和pdf之间的互相转换
- 图片和字节之间的互相转换
- HDU4046 Panda 线段树 单点更新
- C#中的委托和事件
- iOS 纯代码适配6,6plus
- varchar or blob:字段类型的存储和溢出条件
- C++实现服务器压力测试框架
- MS SQL Server10进制和16进制之间的互相转换
- DISTINCT和GROUP BY的区别
- mybatis generator生成带有分页的Mybatis代码
- Activity的生命周期
- dubbo 获取application和ip 打印日志,以便排查问题.
- eclipse: android rename package name
- LSN的10进制和16进制之间的转换
- android 获取相册列表的实现及源码下载(四)
- 一天一段scala代码(十)