我遇到了SQL和图像数据类型查询的问题。
我的程序自动将超过2000张图像添加到数据库中。不幸的是,其中一些是破碎的(灰色图案而不是图像)。我用SQL Managment Studio搜索了破碎的图像在二进制表示法的末尾有很多" 02020202020202"数据。此数据库中的图像内容类型为"图像" (不能改变它)。
如何在整个数据库中搜索02020202二进制表示法的图像?
我尝试了#34;
从im__Image中选择*,其中im_Preview LIKE'%02020%';
但当然它没有用。
如何快速获取已损坏的图像列表?
答案 0 :(得分:0)
我认为你还需要在 varbinary之后转换为varchar (否则你会得到胡言乱语)
假设:
CREATE TABLE im__Image ( ImageID INT IDENTITY PRIMARY KEY
, im_Preview IMAGE
, Added DATETIME DEFAULT GETDATE()
)
和一些测试数据
insert into im__Image (im_Preview) values (0x123123211234320202020202020202020220202021231231)
insert into im__Image (im_Preview) values (0x12312321123432020202020202020202022020202123123102) -- ends with 02, works with 20K+ DataLength()
insert into im__Image (im_Preview) values (0x1231232112340980984723421231231)
此查询为嵌入式0202
提供了技巧select *, convert(varchar(max),CAST(im_Preview as varbinary(max)),2)
from dbo.im__Image
where convert(varchar(max),CAST(im_Preview as varbinary(max)),2) like '%0202%';
这只返回一个以02
结尾的图像select *, convert(varchar(max),CAST(im_Preview as varbinary(max)),2)
from dbo.im__Image
where convert(varchar(max),CAST(im_Preview as varbinary(max)),2) like '%02';
如下所示:
(不保证表现......)