如何将varbinary(max)
类型的列值转换为易读的varchar
类型?
如何将varbinary(max)
类型的列值转换为易读的varchar
类型?
SELECT CONVERT(VARCHAR(1000), varbinary_value, 2);
这里 提供了关于样式(第三个参数)选择的更多细节。
select sys.fn_sqlvarbasetostr(@b) /* 返回0x5468697320697320612074657374 */
。假设将varchar(max)更改为varchar(8000),因为pre-2008不使用它。 - Zachary Scott将一个varbinary
转换为varchar
可能有不同的含义。
如果varbinary
是SQL Server中字符串的二进制表示(例如直接转换为varbinary
或从DecryptByPassPhrase
或DECOMPRESS
函数返回),您可以使用CAST
转换它。
declare @b varbinary(max)
set @b = 0x5468697320697320612074657374
select cast(@b as varchar(max)) /*Returns "This is a test"*/
这相当于使用样式参数为0
的CONVERT
函数。
CONVERT(varchar(max), @b, 0)
在其他答案中指出,CONVERT
还提供了其他样式参数,以满足不同的需求。
SELECT CAST('This is a test' AS VARBINARY(100))
这样的表达式的结果(在我的默认排序规则下为0x5468697320697320612074657374)转换回 varchar
字符串。Gunjan的答案会将十六进制表示作为字符串返回('5468697320697320612074657374')。 OP接受了后者这一解释,推测是符合他们需求的。 - Martin SmithCONVERT
有一个样式参数来选择您想要的方式(我的解释是默认样式)。因此,这个答案可能不是您目前需要的用例,但对于其他用例来说是正确的,包括最初提问者指定的“人类可读形式”,而不是十六进制。 - Martin Smith实际上最好的答案是
SELECT CONVERT(VARCHAR(1000), varbinary_value, 1);
使用 "2
" 可以去掉 varbinary
开头的 "0x
"。
试试这个
SELECT CONVERT(varchar(5000), yourvarbincolumn, 0)
我试过这个方法,对我有效:
declare @b2 VARBINARY(MAX)
set @b2 = 0x54006800690073002000690073002000610020007400650073007400
SELECT CONVERT(nVARCHAR(1000), @b2, 0);
对于 VARBINARY(MAX)
列,我不得不使用 NVARCHAR(MAX)
:
cast(Content as nvarchar(max))
或者
CONVERT(NVARCHAR(MAX), Content, 0)
VARCHAR(MAX) didn't show the entire value
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