SQL Server Analysis Services无法启动
时间:2015-10-10 15:54 来源:linux.it.net.cn 作者:IT
在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(@value BIGINT)
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
(责任编辑:IT)
在MS SQLServer中常常需要用到10进制和16进制之间的互相转换,下面来总结一下。这里会涉及到CONVERT函数: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
一、 十进制转换为十六进制 这个比较简单。可以利用CONVERT函数,如下:
二、 十六进制转换为十进制 按理说,这个和上面一样,也比较简单:
但是在实际操作过程中,十六进制数常常是以字符串表示的,这个就比较麻烦了。
它只是将字符串的ASCII码返回给十六进制数。所以想要正确转换,必须要用UDF函数。在MS SQL Server2008开始,CONVERT函数对VARBINARY提供了一个参数,用于转换十六进制。下面分别说明: 1. MS SQL Server2008之前版本 就像刚才说的必须使用UDF函数。
2. MS SQL Server2008及以后版本 CONVERT函数提供了一个style参数:
利用这个参数,我们就可以非常方便地进行转换了:
(责任编辑:IT) |