MS SQL服务器 - 将HEX字符串转换为整数

时间:2010-08-30 22:08:37

标签: sql-server sql-server-2005

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

Convert integer to hex and hex to integer

..对我不起作用。

我无法使用MS SQL Server 2005 CAST或CONVERT将HEX字符串转换为整数。我错过了一些微不足道的事情吗?我已经进行了广泛的搜索,我能找到的最好的是冗长的用户函数,从十六进制字符串值变为看起来像十进制int的东西。当然有一种简单的方法可以在使用内置函数的查询中直接执行此操作,而不是编写用户函数?

由于

编辑以包含示例:

  

选择CONVERT(INT,0x89)

按预期工作,但

  

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

得到我:

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

额外明确的CAST:

  

选择CONVERT(INT,CAST('0x89'AS VARBINARY))

执行,但返回813185081.

将'Int','Decimal'等替换为'Varbinary'会导致错误。通常,如果需要,看起来是数字的字符串将被解释为数字,但在这种情况下不会被解释为数字,并且似乎没有可识别HEX的CAST。我想有一些简单而明显的东西,我只是错过了它。

  

Microsoft SQL Server Management Studio Express 9.00.3042.00

     

Microsoft SQL Server 2005 - 9.00.3080.00(Intel X86)2009年9月6日01:43:32版权所有(c)1988-2005 Microsoft Corporation在Windows NT 5.1上具有高级服务的Express Edition(Build 2600:Service Pack 3)< / p>

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

1 个答案:

答案 0 :(得分:32)

感谢您提供更明确的示例。据我所知,从文档和谷歌搜索,没有UDF或其他程序代码,这在MSSQL 2005中是不可能的。在MSSQL 2008中,CONVERT()函数的 style 参数现在支持二进制数据,因此您可以像这样直接执行:

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

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

  • 使用UDF(TSQL或CLR;实际上CLR可能更容易)
  • 在一个存储过程中包装SELECT(但是你可能仍然有相当于UDF的颜色)
  • 在应用程序前端转换它
  • 升级到MSSQL 2008

如果转换数据仅用于显示目的,则应用程序可能是最简单的解决方案:无论如何数据格式通常都属于那里。如果你必须在查询中执行它,那么UDF是最简单的,但性能可能不是很好(我知道你说你更喜欢不使用UDF,但不清楚为什么)。我猜测为此升级到MSSQL 2008可能是不现实的。

最后,仅供参考,您提供的版本号是Management Studio的版本,而不是服务器的版本号。为此,请使用select @@versionselect serverproperty('ProductVersion')查询服务器本身。