如何在 SQL Server 2005 中将十六进制字符串转换为二进制?
How to convert hex string to binary in SQL Server 2005?
如何将 SQL 服务器中的十六进制字符串转换为二进制?
更好的是,我如何将 SQL 服务器中的十六进制字符串转换为整数?
问题是 Whosebug 上的每个现有答案都假定 SQL Server 2008。
尝试失败
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 时尚,试图规避问题而不是回答问题。
适用于可以表示为 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]
SQL Server 2005 有一个函数 master.sys.fn_varbintohexstr()
(显然在 SQL Server 2000 it was called dbo.fn_varbintohexstr
中)将二进制转换为字符串。
搜索此函数名称会出现将十六进制字符串转换为二进制的答案,例如this SO answer, or Social MSDN (useful code, but lots of dead links), or this MSDN blog 使用 XQuery 解析十六进制字符串。
如何将 SQL 服务器中的十六进制字符串转换为二进制?
更好的是,我如何将 SQL 服务器中的十六进制字符串转换为整数?
问题是 Whosebug 上的每个现有答案都假定 SQL Server 2008。
尝试失败
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 时尚,试图规避问题而不是回答问题。
适用于可以表示为 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]
SQL Server 2005 有一个函数 master.sys.fn_varbintohexstr()
(显然在 SQL Server 2000 it was called dbo.fn_varbintohexstr
中)将二进制转换为字符串。
搜索此函数名称会出现将十六进制字符串转换为二进制的答案,例如this SO answer, or Social MSDN (useful code, but lots of dead links), or this MSDN blog 使用 XQuery 解析十六进制字符串。