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

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

Convert integer to hex and hex to integer

对我来说不行

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

谢谢

编辑包括示例:

select CONVERT(INT,0x89)

按预期工作,但

select CONVERT(INT,‘0x’ + substring(msg,66,2)) from soMetable

得到我

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

一个额外的明确CAST:

select 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 copyright (c) 1988-2005 Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 (Build 2600: Service Pack 3)

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

解决方法

感谢您提供一些更明确的例子.据我从文档和Google Googling中可以看出,如果没有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只是为了这可能是不现实的.

最后,FYI您所包含的版本号是Management Studio的版本,而不是您的服务器的版本号.为了得到这一点,使用select @@ version查询服务器本身或选择serverproperty(‘ProductVersion’).

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...