我有一個與nvarchar(4000)
字段的SQL Server 2008 R2表。如何將nvarchar解碼爲文本(SQL Server 2008 R2)?
數據看起來像
'696D616765206D61726B65643A5472'
或
'303131' ("011")
。
我看到每個字符都編碼爲十六進制。
如何從表中讀取這些數據?我不想寫解碼功能,我的意思是存在更簡單的方法。
P.S.對不起我的英語不好。
我有一個與nvarchar(4000)
字段的SQL Server 2008 R2表。如何將nvarchar解碼爲文本(SQL Server 2008 R2)?
數據看起來像
'696D616765206D61726B65643A5472'
或
'303131' ("011")
。
我看到每個字符都編碼爲十六進制。
如何從表中讀取這些數據?我不想寫解碼功能,我的意思是存在更簡單的方法。
P.S.對不起我的英語不好。
SQL Server 2008中實際上有一個內置的十六進制編碼和解碼功能!
樣品(注意與值「1」轉換您的字符串VARBINARY當第三個參數):
DECLARE @ProblemString VarChar(4000) = '54657374'
SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1))
這種方法的優點是你不需要「執行」電話,你通常試圖避免,因爲擔心注射等。缺點是它僅適用於SQL Server 2008及更高版本。
您將需要一個解碼功能,我認爲,最簡單的:
declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472'
exec('SELECT CONVERT(varchar(max),0x' + @fld + ')')
---------------
image marked:Tr
申報@fld爲nvarchar(4000) 組@fld = '696D616765206D61726B65643A5472' EXEC( '選擇轉換(VARCHAR(最大),0X' + @fld + ')')我認爲這將是更精確的 – Pankaj 2011-06-07 10:20:03
真,雖然在sql 2k8 – 2011-06-07 10:33:08
中支持'declare @v type = value'是值得的,我爲此道歉。 – Pankaj 2011-06-07 10:42:32