SQL十进制和十六进制相互转换

Posted GarsonZhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL十进制和十六进制相互转换相关的知识,希望对你有一定的参考价值。

CREATE FUNCTION ufn_ConvertInt2Hex ( @Num BIGINT )
RETURNS VARCHAR(500)
AS
BEGIN
/**************************************
-- 功能:十进制转十六进制
-- 作者:GarsonZhang
-- 时间:2016年5月28日13:26:55
-- 测试:
PRINT dbo.ufn_ConvertInt2Hex(50)
**************************************/

DECLARE @Result VARCHAR(500)
SET @Result = ‘‘
WHILE ( @Num > 0 )
BEGIN
SET @Result = SUBSTRING(0123456789ABCDEF, @Num % 16 + 1, 1)
+ @Result
SET @Num = @Num / 16
END
RETURN @Result
END
GO

CREATE FUNCTION ufn_ConvertHex2Int ( @HexString VARCHAR(16) )
RETURNS BIGINT
AS /**************************************
-- 功能:十六进制转十进制
-- 作者:GarsonZhang
-- 时间:2016年5月28日13:30:24
-- 测试:
PRINT dbo.ufn_ConvertInt2Hex(50)
**************************************/
BEGIN 
DECLARE @Result BIGINT

DECLARE @i INT ,
@len INT

DECLARE @power BIGINT
SET @power = 16

SELECT @i = 0 ,
@Result = 0 ,
@HexString = RTRIM(LTRIM(UPPER(@HexString)))

SET @len = LEN(@HexString) 

IF ( @len = 16 )
BEGIN 
IF ( ASCII(SUBSTRING(@HexString, 1, 1)) > 55 )
BEGIN 
-- RaisError(‘超出数据运算范围‘, 1, 16) 
RETURN @Result
END 
END 
------------------------------------------------------- 
WHILE ( @i < @len )
BEGIN 
IF ( ( SUBSTRING(@HexString, @len - @i, 1) NOT BETWEEN 0 AND 9 )
AND ( SUBSTRING(@HexString, @len - @i, 1) NOT BETWEEN A AND F )
)
BEGIN 
SET @Result = 0
BREAK;
END 
---------------------------------------- 

SET @Result = @Result + ( CHARINDEX(SUBSTRING(@HexString,
@len - @i, 1),
0123456789ABCDEF) - 1 )
* CAST(POWER(@power, @i) AS BIGINT)
SET @i = @i + 1 
END 
---------------------------------------------- 
RETURN @Result 
END

 

以上是关于SQL十进制和十六进制相互转换的主要内容,如果未能解决你的问题,请参考以下文章

十六进制与十进制之间的相互转换

Int32 最大的数值是多少???(附十进制十六进制相互转换且包含正负数的java代码)

Delphi - 10进制16进制相互转换

二进制数据和文件之间相互转换的方法

二进制八进制十进制十六进制之间的相互转换

C# 把word转成2进制存储到SQL2000中的问题