通过like命令在sql中搜索图像

时间:2015-06-25 13:22:56

标签: sql sql-server image tsql

我遇到了SQL和图像数据类型查询的问题。

我的程序自动将超过2000张图像添加到数据库中。不幸的是,其中一些是破碎的(灰色图案而不是图像)。我用SQL Managment Studio搜索了破碎的图像在二进制表示法的末尾有很多" 02020202020202"数据。此数据库中的图像内容类型为"图像" (不能改变它)。

如何在整个数据库中搜索02020202二进制表示法的图像?

我尝试了#34;

  

从im__Image中选择*,其中im_Preview LIKE'%02020%';

但当然它没有用。

如何快速获取已损坏的图像列表?

1 个答案:

答案 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';

如下所示:

Management Studio Output

(不保证表现......)