我嘗試使用TSQL,並且在值位於變量內時出現了將十六進制轉換爲十進制的問題。T-SQL將十六進制轉換爲十進制
我的代碼是:
SET @hex = SUBSTRING(@x,1,2) --give 1e
SET @hex = '0x' + @hex
SELECT CAST (@hex AS int)
我得到的錯誤轉換爲varchar值爲int
我不知道什麼是錯的,到目前爲止,我無法找到當轉換失敗解決方案
任何想法?謝謝
我嘗試使用TSQL,並且在值位於變量內時出現了將十六進制轉換爲十進制的問題。T-SQL將十六進制轉換爲十進制
我的代碼是:
SET @hex = SUBSTRING(@x,1,2) --give 1e
SET @hex = '0x' + @hex
SELECT CAST (@hex AS int)
我得到的錯誤轉換爲varchar值爲int
我不知道什麼是錯的,到目前爲止,我無法找到當轉換失敗解決方案
任何想法?謝謝
此作品(用於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頁上的 「二元樣式」。
我不認爲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注入攻擊保護,你可能會希望把這個函數或存儲過程
我跑你的查詢,它給出的結果爲48.但十六進制1e的十進制是30.任何想法,爲什麼發生這種情況? – th1rdey3
@ th1rdey3 - 當我在我的機器上運行它時,它給出的結果是30.當我在2005服務器上運行它時,它給出了48.這就是爲什麼我說它是在2008或更高版本中。對於2005,它的行爲方式與'0'風格相同 - 它告訴你'0'的ASCII值是48. –
@Damien_The_Unbeliever有趣的區別,你能解釋'SQL Server之前和之後'CONVERT'之間的區別究竟是什麼2008'?找不到您的答案的鏈接。 – DrCopyPaste