【问题标题】:How to convert hex string to binary in SQL Server 2005?如何在 SQL Server 2005 中将十六进制字符串转换为二进制?
【发布时间】:2018-03-20 16:09:24
【问题描述】:

如何将 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 时尚,试图绕过问题而不是回答问题。

【问题讨论】:

  • SQL 在 2005 年甚至有 varbinary 数据类型吗?

标签: sql-server sql-server-2005


【解决方案1】:

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 解析十六进制字符串.

【讨论】:

    【解决方案2】:

    适用于可以表示为 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 2016-07-07
      • 2022-07-21
      • 2013-02-07
      相关资源
      最近更新 更多