【发布时间】:2011-04-05 23:58:03
【问题描述】:
这个看似相同问题的答案:
Convert integer to hex and hex to integer
..不适合我。
我无法使用 MS SQL Server 2005 CAST 或 CONVERT 将 HEX 字符串转换为整数。我错过了一些微不足道的事情吗?我进行了广泛的搜索,我能找到的最好的是冗长的用户函数,可以从十六进制字符串值变成看起来像十进制整数的东西。当然有一种简单的方法可以直接在查询中使用内置函数而不是编写用户函数来执行此操作?
谢谢
编辑以包含示例:
选择转换(INT,0x89)
按预期工作,但是
从某个表中选择 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) Sep 6 2009 01:43:32 版权所有 (c) 1988-2005 Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 (Build 2600: Service Pack 3)
总结一下:我想取一个十六进制字符串,它是表中的一个值,并将其作为十进制整数的查询结果的一部分显示,仅使用系统定义的函数,而不是 UDF。
【问题讨论】:
-
您是否遇到特定错误或意外结果?示例会很有帮助。
-
你见过这个吗?看cmets...blog.sqlauthority.com/2010/02/01/…
-
这是我搜索时出现的第一批帖子之一。这些答案中的每一个要么使用用户函数、DLL(用于大声哭泣!),要么建议使用迄今为止我无法使用的内置 CONVERT。使用它的建议似乎被许多没有自己测试过的人复制了很多次。
-
我认为您将不得不为此使用 UDF:digitalcolony.com/2007/06/…
-
“不起作用是什么意思”? CONVERT() 是一个内置函数,它不太可能不起作用。因此,请发布您的 MSSQL 版本和版本,以及从您链接到的答案中运行两个 SELECT 查询的结果:SELECT CONVERT(VARBINARY(8), 16777215) 和 SELECT CONVERT(INT, 0xFFFFFF)
标签: sql-server sql-server-2005