我在SQL Server中有一个表,二进制数据作为字符串存储在varchar(max)
字段中。
表名称为附件,字段名称为“ documentbody”。
select id, mimetype, documentbody
from attachment
表中存储的文件主要是PDF,但还包括JPG和PNG以及其他一些文件类型。
以下是查询时“文件”之一的样例(仅前100个字符):
JVBERi0xLjQKJeLjz9MNCjEgMCBvYmoKPDwvVHlwZSAvUGFnZQovUGFyZW50IDIgMCBSCi9NZWRpYUJveCBbIDAgMCA2MTIuMDAw
如何将这些数据转换为实际的二进制数据?
答案 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;