使用like命令在sql中搜索图像

使用like命令在sql中搜索图像,sql,sql-server,image,tsql,Sql,Sql Server,Image,Tsql,SQL和图像数据类型查询有问题 我的程序自动将2000多幅图像添加到数据库中。不幸的是,其中一些被破坏(灰色模式而不是图像)。我用SQLManagementStudio搜索到,损坏的图像在其二进制符号末尾有许多“0202020202”数据。此数据库中图像内容的类型为“图像”(无法更改) 如何在整个数据库中搜索带有020202二进制标记的图像 我试过了” 从即时消息预览的即时消息图像中选择*,如“%02020%” 但当然,它不起作用 如何快速获得已损坏的图像列表?我认为您还需要在varbinary

SQL和图像数据类型查询有问题

我的程序自动将2000多幅图像添加到数据库中。不幸的是,其中一些被破坏(灰色模式而不是图像)。我用SQLManagementStudio搜索到,损坏的图像在其二进制符号末尾有许多“0202020202”数据。此数据库中图像内容的类型为“图像”(无法更改)

如何在整个数据库中搜索带有020202二进制标记的图像

我试过了”

从即时消息预览的即时消息图像中选择*,如“%02020%”

但当然,它不起作用


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

我认为您还需要在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';
如下所示:


(性能没有保证…)

试试:
从im_u图像中选择*在哪里进行转换(im_u预览为字符(10000)字符集utf8),如“%020%”;
为什么不能将其从图像更改为varbinary(最大值)?我已经做了很多次了,但这从来都不是问题。图像数据类型从2005年开始就不推荐使用。当我使用你的查询时,如果修改了像->像“%02”,它不会给我任何结果。我已经检查过了,我要找的图片的结尾是020202…我需要像这样使用,因为有些图像在里面其中020202代码是正确的。因此我认为最好的方法是在结尾处查找它们。问题出在哪里?我的查询选择*,convert(varchar(max),CAST(im_Image as varbinary(max)),2)从dbo.im_Image where convert(varchar(max),CAST(im_Image as varbinary(max)),2)像“%02”在SQL 2014上为我工作一样,将为我使用的SELECT@@VERSION和它显示的答案添加细节->Microsoft SQL Server 2014-12.0.4100.1(X64)您的查询的字段名错误,应该是im_预览:
SELECT*,datalength(im_预览),convert(varchar(max),CAST(im_预览为varbinary(max)),2)来自dbo.im_图像,其中convert(varchar(max),CAST(im_Preview as varbinary(max)),2)类似于“%02”
我已更改了答案以使用您的确切列名