2010-07-20 110 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

相关问题