繁体   English   中英

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

[英]Convert non-hex text in varchar(max) to varbinary

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

表名为attachment,字段名为“documentbody”。

select id, mimetype, documentbody
from attachment

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

这是查询时其中一个“文件”的示例(仅前 100 个字符):

JVBERi0xLjQKJeLjz9MNCjEgMCBvYmoKPDwvVHlwZSAvUGFnZQovUGFyZW50IDIgMCBSCi9NZWRpYUJveCBbIDAgMCA2MTIuMDAw

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

查询结果截图

如果希望将数据从一种数据类型转换为另一种数据类型,并且不存在隐式转换,则可以使用CASTCONVERT

例如

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

CAST是 ANSI-SQL 的价值,而CONVERT是 SQL 服务器特定的。 但是CONVERT处理许多其他情况,包括CAST不处理的特定格式。


好吧,在这里总猜一下,很多人将二进制数据编码为base64所以试试这个:

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

因此,我想感谢 FNG 从 2020 年开始为此做的。我知道他正试图从 Dynamics CRM 数据库中导出数据。 (因为我认识到他的数据结构,因为我正在尝试做完全相同的事情)。

我还想提一下,我还需要做一个额外的步骤。

最终结果是使用 Dale K 上面的代码转换为 64basebinary(至关重要),然后将该数据写回到 Varbinary 表中。 一旦我这样做了,我就能够成功下载可用/工作的附件。

所以谢谢你们俩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM