我如何将十六进制值的varchar转换为int?

问题描述:

我需要一个VARCHAR用十六进制数转换成INT,我想:我如何将十六进制值的varchar转换为int?

DECLARE @H VARCHAR(2); 
SELECT @H = '9a' 
SELECT CONVERT(INT, 0x + @H) 

但它说@H必须是一个VARBINARY,如果我投我得到一个完全不同的数字。我想获得154,我该如何实现它?

如果2008+可以使用

Select @Value = Cast(CONVERT(varbinary(4), '0x' + @HexValue, 1) As int) 

看起来像this guy会让你到一个varbinary,那么你可以使用CONVERT函数。

看起来你可以用XML来做natively。 WTF Micsrosft XML?

Declare @HexValue varchar(10) 
Set @HexValue = '9a' 

Declare @Sql nvarchar(max) 
Declare @Value int 

Set @Sql = 'Select @Value = Cast(Cast(0x' + @HexValue + ' as varbinary(4)) As int)' 
exec sp_executesql @Sql, N'@Value int OUTPUT', @Value OUTPUT 

Select @Value 
+3

+1如果SQL Server 2008中,你不需要为这个动态SQL。 '选择@Value = Cast(CONVERT(varbinary(4),'0x'+ @HexValue,1)作为int)'做这项工作。 – 2010-08-27 21:39:51

+0

@MartinSmith - 为什么不把这添加为答案 – ughai 2015-10-23 07:19:11

+0

@ughai我已经编辑了我的现有答案以代替它。 – 2015-10-23 07:45:27