T-SQL将十六进制转换为十进制

时间:2013-10-09 06:52:21

标签: tsql

我尝试使用TSQL,当值在变量中时,我会遇到一些问题,将十六进制转换为十进制。

我的代码是:

SET @hex = SUBSTRING(@x,1,2) --give 1e
SET @hex = '0x' + @hex
SELECT CAST (@hex AS int)

我在将varchar值转换为int

时收到转换失败的错误

我不知道这是什么问题,到目前为止我找不到解决方案

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:6)

这适用于(对于SQL Server 2008或更高版本):

declare @hex varchar(316)
SET @hex = '1e' --SUBSTRING(@x,1,2) --give 1e
SET @hex = '0x' + @hex
SELECT CONVERT(int,CONVERT (binary(1),@hex,1))

请参阅CAST and CONVERT页面上的“二进制样式”。

答案 1 :(得分:1)

我不认为T-SQL可以显式地将十六进制字符串转换为数字,但它可以转换十六进制数字,这样你就可以把它变成你想做的事情了。像这样:

DECLARE @hex nvarchar(20)
DECLARE @select nvarchar(200)
DECLARE @parm nvarchar(200)
DECLARE @retVal int
SET @hex = '0x1e'
SET @select = 'SELECT @retVal = CAST(' + @hex + ' AS int)'
SET @parm = '@retVal int OUTPUT'
EXEC sp_executesql @select, @parm, @retVal OUTPUT
SELECT @retVal

您需要验证@hex以防止SQL注入攻击,并且您可能希望将其置于函数或存储过程中