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.
解决方法
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’).