2010-07-20 107 views
62

如何從varbinary(max)列值轉換爲varchar在人類可讀形式的字符串?VARBINARY到SQL Server

+3

我想VARCHAR,因爲值從字符串值isterted。我是說要讀什麼寫的.. – theklc 2010-07-20 12:43:59

回答

65

「轉換一個varbinaryvarchar」 可能意味着不同的事情。

如果VARBINARY是在SQL Server中的字符串(例如,通過直接鑄造varbinary或從DecryptByPassPhraseDECOMPRESS函數返回)的二進制表示你可以CAST

declare @b varbinary(max) 
set @b = 0x5468697320697320612074657374 

select cast(@b as varchar(max)) /*Returns "This is a test"*/ 

這相當於使用CONVERT,樣式參數爲0

CONVERT(varchar(max), @b, 0) 

如其他答案中提到的其他樣式參數可用於CONVERT不同的要求。

+20

這個答案是不正確的。我使用用戶SID在桌面上測試了它 - 獨特鑄造值的數量少於不同二進制SID的數量。您應該使用CONVERT(VARCHAR(...),binaryValue,2),以獲得獨特的價值 - 從Gunjan Juyal的答案是正確的 - 它應該被標記爲解決 – 2013-10-18 20:03:06

+9

@PhilippMunin - 這兩個答案,做不同的事情。這一個接受一個表達式的結果,如'SELECT CAST(「這是一個測試」 AS VARBINARY(100))'是'0x5468697320697320612074657374'在我的默認排序,並將其轉換回'varchar'字符串。 Gunjan的答案以字符串的形式返回了十六進制表示('5468697320697320612074657374')。大概這種解釋對於OP的需求是正確的,因爲他們接受它。 – 2013-10-18 20:28:55

+5

這個答案是正確的!我測試了它,它符合我和OP的要求。 – 2015-10-07 14:50:39

12

試試這個

SELECT CONVERT(varchar(5000), yourvarbincolumn, 0) 
+6

我不得不使用2作爲我的第三個參數,而不是零。我發現答案[這裏](http://stackoverflow.com/questions/12139073/sql-server-converting-varbinary-to-string)。 – WEFX 2013-01-02 16:10:02

+0

在我的情況下,我必須使用MAX而不是5000 – sulaiman 2018-02-01 02:40:14

86

下面的表達式爲我工作:

SELECT CONVERT(VARCHAR(1000), varbinary_value, 2); 

Here都在款式的選擇(第三個參數)的更多細節。

+1

會如果OP標誌這個作爲答案是很好的。 – celerno 2017-07-20 17:20:38

+0

如下面的@ lara-mayugba所述,樣式1在結果中包含0x前綴,這可能很有用。 – Stan 2017-11-09 16:07:10

+0

@celerno他們爲什麼會這樣?這不會做他們需要的。 – 2018-01-28 16:12:05

23

其實最好的答案是

SELECT CONVERT(VARCHAR(1000), varbinary_value, 1); 

使用 「2」 切斷 「0x」 的varbinary的開始。

+0

這個工作對我來說 – Jozcar 2017-08-09 14:45:36

相關問題