代码之家  ›  专栏  ›  技术社区  ›  MickeyfAgain_BeforeExitOfSO

MS SQL server-将十六进制字符串转换为整数

  •  19
  • MickeyfAgain_BeforeExitOfSO  · 技术社区  · 15 年前

    这个答案看起来像是同一个问题:

    Convert integer to hex and hex to integer

    …对我不起作用。

    我无法使用MS SQL server 2005强制转换或转换将十六进制字符串转换为整数。我是不是错过了一些小事?我已经做了大量的搜索,我能找到的最好的方法是冗长的用户函数,从十六进制字符串值到看起来像十进制整数的值。当然有一种简单的方法可以直接在查询中使用内置函数而不是编写用户函数吗?

    谢谢

    编辑以包含示例:

    工作如预期,但

    从sometable中选择CONVERT(INT,'0x'+substring(msg,66,2))

    将varchar值“0x89”转换为数据类型int时,转换失败

    额外的显式转换:

    执行,但返回813185081。

    用“Int”、“Decimal”等替换“Varbinary”会导致错误。一般来说,如果需要,看起来是数字的字符串将被解释为数字,但在本例中不是这样,而且似乎没有识别十六进制的强制转换。我想有一些简单而明显的东西,我只是错过了。

    Microsoft SQL Server Management Studio Express 9.00.3042.00

    总而言之:我想获取一个十六进制字符串,它是表中的一个值,并将其作为查询结果的一部分显示为十进制整数,只使用系统定义的函数,而不是自定义项。

    1 回复  |  直到 6 年前
        1
  •  35
  •   Pondlife    15 年前

    风格 参数现在支持二进制数据,因此您可以直接这样做:

    select convert(int, convert(varbinary, '0x89', 1))
    

    在以前的版本中,您可以选择:

    • 使用自定义项(TSQL或CLR;CLR实际上可能更容易实现这一点)
    • 在应用程序前端转换它
    • 升级至MSSQL 2008

    select @@version select serverproperty('ProductVersion')

    推荐文章