我尝试使用TSQL,当值在变量中时,我会遇到一些问题,将十六进制转换为十进制。
我的代码是:
SET @hex = SUBSTRING(@x,1,2) --give 1e
SET @hex = '0x' + @hex
SELECT CAST (@hex AS int)
我在将varchar值转换为int
时收到转换失败的错误我不知道这是什么问题,到目前为止我找不到解决方案
有什么想法吗?感谢
答案 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注入攻击,并且您可能希望将其置于函数或存储过程中