如何将SQL Server中的十六进制字符串转换为二进制文件?
更好的是,我如何将SQL Server中的十六进制字符串转换为整数?
问题是Stackoverflow上的每个现有答案都假设SQL Server 2008。
Convert hex string to binary SQL Server
SELECT CONVERT(binary(16),'0x01',1)
0x30783031000000000000000000000000
SQL Server hex string to varbinary conversion
select CONVERT(varbinary(max), '0x01', 1);
0x30783031
select CONVERT(varbinary(max), '01', 2);
0x3031
Convert integer to hex and hex to integer
-- If the '0x' marker is present:
SELECT CONVERT(INT, CONVERT(VARBINARY, '0x000001', 1))
808464433
-- If the '0x' marker is NOT present:
SELECT CONVERT(INT, CONVERT(VARBINARY, '000001', 2))
808464433
...是的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时尚,试图绕过问题而不是回答它。
答案 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 answer或Social MSDN(有用的代码,但有很多死链接)或this MSDN blog使用XQuery解析十六进制字符串。