varbinary转换为SQL Server上的字符串


93

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


3
我想VARCHAR,因为值从字符串值isterted。我是说要读什么写..
比尔金的Kılıç

@MartinSmith ppl促使我改变。因此,请再次标记您的答案。谢谢您的友善。
比尔金(BilginKılıç)

人们似乎从搜索引擎中发现了这一点,基于投票,似乎更常需要使用style 2参数,但这并不能满足您的原始要求
Martin Smith,

Answers:


87

“将a转换varbinaryvarchar”可能意味着不同的意思。

如果varbinary是SQL Server中字符串的二进制表示形式(例如,通过varbinary直接转换为或从DecryptByPassPhraseor DECOMPRESS函数返回),则可以使用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用于其他要求,如其他答案中所述。


38
此答案不正确。我使用用户SID在表上对其进行了测试-Distinct强制转换值的数量小于Distinct二进制SID的数量。您应该使用CONVERT(VARCHAR(...),binaryValue,2)获得唯一值-Gunjan Juyal的答案是正确的-应该将其标记为解决方案
Philipp Munin

13
@PhilippMunin-两个答案做不同的事情。这需要一个这样的表达式的结果SELECT CAST('This is a test' AS VARBINARY(100)),其是0x5468697320697320612074657374在我的默认排序规则并将其转换回到varchar字符串。Gunjan的答案以字符串形式返回十六进制表示形式('5468697320697320612012074657374')假定此解释对于OP接受时是正确的。
马丁·史密斯

8
这是正确的答案!我对其进行了测试,它可以满足我和OP的要求。
罗尼·欧弗比

1
@BIDeveloper如果您已经阅读了上面的评论(特别是我的评论),您应该意识到问题是“将varbinary转换为varchar”可以用不同的方式解释。的确,这就是为什么CONVERT要有一个样式参数来选择所需方式的原因(我的解释是默认样式),因此此答案可能不是您当前用例所需要的,但对于其他用例是正确的。包括指定“人类可读形式”而不是十六进制的原始提问者。
马丁·史密斯

1
SQL 2005您可以使用sys.fn_sqlvarbasetostr(@binary),因为CONVERT对我来说是空白
TheNerdyNerd

149

以下表达式对我有用:

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

是有关样式选择(第三个参数)的更多详细信息。


正如下面@拉拉-mayugba描述,风格1包括前缀0x的结果可以是有用..
斯坦

@celerno为什么会呢?这不能满足他们的需求。
马丁·史密斯

1
2008年之前使用sys.fn_sqlvarbasetostr(@binaryfield)
TheNerdyNerd '18

@metabuddy-以什么方式提供错误信息?它指出,术语“将varbinary转换为varchar”可以以不同的方式完成,并且这些方式由style参数控制。仅仅因为该答案中的样式参数不是您的案例所需的那个(而是回答原始问题的那个)就不会使它成为错误的信息
Martin Smith,

为了强调@TheNerdyNerd的注释/答案,表达式为`select sys.fn_sqlvarbasetostr(@b)/ *返回0x5468697320697320612074657374 * /假设一个将varchar(max)更改为varchar(8000),因为2008年前的版本未使用它。
Zachary Scott

63

其实最好的答案是

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

在程序开始时用“ 2”切断“ 0xvarbinary


@BojieShuai您是说“我非常同意,以至于我不可能进一步同意”,还是“我曾经同意但我不再同意”?
howcheng

@howcheng我的意思是“完全不同意”。感谢您指出了这一点。
Bojie Shuai


0

对于VARBINARY(MAX)专栏,我不得不使用NVARCHAR(MAX)

cast(Content as nvarchar(max))

要么

CONVERT(NVARCHAR(MAX), Content, 0)
VARCHAR(MAX) didn't show the entire value

0

我尝试了这个,对我有用:

declare @b2 VARBINARY(MAX) 
set @b2 = 0x54006800690073002000690073002000610020007400650073007400
SELECT CONVERT(nVARCHAR(1000), @b2, 0);

0

我在原始帖子中苦苦挣扎,请在下面浏览[这里] [1]

bcp "SELECT CAST(BINARYCOL AS VARCHAR(MAX)) FROM OLTP_TABLE WHERE ID=123123 AND COMPANYID=123" 
queryout "C:\Users\USER\Documents\ps_scripts\res.txt" -c -S myserver.db.com  -U admin -P password


  [1]: https://stackoverflow.com/questions/60525910/powershell-truncating-sql-query-output?noredirect=1#comment107077512_60525910
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.