将varchar(max)中的非十六进制文本转换为varbinary

时间:2020-07-26 20:24:33

标签: sql-server file binary attachment

我在SQL Server中有一个表,二进制数据作为字符串存储在varchar(max)字段中。

表名称为附件,字段名称为“ documentbody”。

select id, mimetype, documentbody
from attachment

表中存储的文件主要是PDF,但还包括JPG和PNG以及其他一些文件类型。

以下是查询时“文件”之一的样例(仅前100个字符):

JVBERi0xLjQKJeLjz9MNCjEgMCBvYmoKPDwvVHlwZSAvUGFnZQovUGFyZW50IDIgMCBSCi9NZWRpYUJveCBbIDAgMCA2MTIuMDAw

如何将这些数据转换为实际的二进制数据?

screenshot of query results

1 个答案:

答案 0 :(得分:1)

当一个人希望将数据从一种数据类型转换为另一种数据类型,并且不存在隐式转换时,则可以使用CAST or CONVERT

例如

select cast(MyColumn as varbinary(max)), convert(varbinary(max), MyColumn)
from MyTable;

CAST是ANSI-SQL的价值,而CONVERT是特定于SQL Server的。但是CONVERT处理许多其他情况,包括CAST无法处理的特定格式。


好吧,这里有个大概的猜测,许多人将二进制数据编码为base64,所以请尝试这样做:

SELECT CAST(CAST(N'' AS XML).value('xs:base64Binary(sql:column("MyColumn"))', 'VARBINARY(MAX)') AS VARCHAR(MAX))
FROM MyTable;
相关问题