如何在SQL Server 2005中将十六进制字符串转换为二进制?

时间:2018-03-20 16:09:24

标签: sql-server sql-server-2005

如何将SQL Server中的十六进制字符串转换为二进制文件?

更好的是,我如何将SQL Server中的十六进制字符串转换为整数?

问题是Stackoverflow上的每个现有答案都假设SQL Server 2008。

尝试失败

修改

...是的2005年有varbinary。即使2000有varbinary

SELECT name, xtype FROM systypes WHERE name LIKE '%binary%'; 
SELECT @@version;

name       xtype
---------  -----
varbinary  165
binary     173

(No column name)
---------------------------------
Microsoft SQL Server  2000 - 8.00.2039 (Intel X86) 
May  3 2005 23:18:38 
Copyright (c) 1988-2003 Microsoft Corporation
Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

Even SQL Server 6.5 has varbinary. *(archive)*有趣且典型的SO时尚,试图绕过问题而不是回答它。

2 个答案:

答案 0 :(得分:1)

适用于可以表示为bigint的值

DECLARE @Hex VARCHAR(10)='0x3078'
DECLARE @DecValue BIGINT=0
DECLARE @Power TINYINT = 0

SET @Hex=REVERSE(REPLACE(@Hex,'0x',''))
WHILE LEN(@Hex)>0
BEGIN
    SET @DecValue=@DecValue+(POWER(16,@Power)*CONVERT(TINYINT,LEFT(@Hex,1)))
    SET @Power=@Power+1
    SET @Hex=RIGHT(@Hex,LEN(@Hex)-1)
END

SELECT @DecValue AS [Decimal value]

答案 1 :(得分:0)

SQL Server 2005有一个函数master.sys.fn_varbintohexstr()(显然在SQL Server 2000中it was called dbo.fn_varbintohexstr)将二进制转换为字符串。

搜索此函数名称会显示将十六进制字符串转换为二进制文件的答案,例如this SO answerSocial MSDN(有用的代码,但有很多死链接)或this MSDN blog使用XQuery解析十六进制字符串。