varbinary到SQL Server上的字符串

Bil*_*lıç 87 sql t-sql sql-server sql-server-2005

如何将列值从转换varbinary(max)varchar人类可读的形式?

小智 136

以下表达式对我有用:

SELECT CONVERT(VARCHAR(1000), varbinary_value, 2);
Run Code Online (Sandbox Code Playgroud)

以下是关于样式选择的更多细节(第三个参数).

  • 正如下面@lara-mayugba 所描述的,样式 1 在结果中包含 0x 前缀,这很有用。 (2认同)

Mar*_*ith 81

"将a转换varbinary为a varchar"可能意味着不同的东西.

如果VARBINARY是一个字符串的SQL Server中的二进制表示(例如,通过铸造回到varbinary直接或从DecryptByPassPhraseDECOMPRESS功能),你只需CAST

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

select cast(@b as varchar(max)) /*Returns "This is a test"*/
Run Code Online (Sandbox Code Playgroud)

这相当于使用CONVERT样式参数0.

CONVERT(varchar(max), @b, 0)
Run Code Online (Sandbox Code Playgroud)

其他样式参数可CONVERT用于不同的要求,如其他答案中所述.

  • 这个答案是不正确的.我在桌面上用用户SID测试它 - 不同的铸造值的数量小于不同的二进制SID的数量.你应该使用CONVERT(VARCHAR(...),binaryValue,2)来获得独特的价值 - Gunjan Juyal的答案是正确的 - 它应该被标记为解决方案 (36认同)
  • @PhilippMunin - 这两个答案做了不同的事情.这一个接受一个表达式的结果,如`SELECT CAST("这是一个测试" AS VARBINARY(100))`是`0x5468697320697320612074657374`在我的默认排序,并将其转换回`varchar`字符串.Gunjan的答案将十六进制表示作为字符串返回('5468697320697320612074657374')据推测,这种解释对于OP的需要是正确的,因为他们接受了它. (13认同)
  • 这个答案是正确的!我测试了它,它做了我和OP想要的. (8认同)
  • @BIDeveloper如果您阅读了上面的评论(特别是我的评论),您应该意识到问题是“将 varbinary 转换为 varchar”可以用不同的方式解释。事实上,这就是为什么“CONVERT”有一个样式参数来选择你想要的方式(我的解释是默认样式)所以这个答案可能不是你目前的用例所需要的,但它对于其他用例来说是正确的。包括原始提问者指定的“人类可读形式”而不是十六进制。 (2认同)

小智 53

实际上最好的答案是

SELECT CONVERT(VARCHAR(1000), varbinary_value, 1);
Run Code Online (Sandbox Code Playgroud)

使用" 2"切断了" 0x"的开头varbinary.


dma*_*kic 14

试试这个

SELECT CONVERT(varchar(5000), yourvarbincolumn, 0)
Run Code Online (Sandbox Code Playgroud)

  • 我不得不使用2作为我的第三个参数,而不是零.我发现答案[这里](http://stackoverflow.com/questions/12139073/sql-server-converting-varbinary-to-string). (6认同)

小智 6

我尝试过这个,它对我有用:

declare @b2 VARBINARY(MAX) 
set @b2 = 0x54006800690073002000690073002000610020007400650073007400
SELECT CONVERT(nVARCHAR(1000), @b2, 0);
Run Code Online (Sandbox Code Playgroud)