如何在image/varbinary字段中搜索以二进制模式开头的记录

Sco*_*ain 4 sql search sql-server-2005 image magic-numbers

我试图找到所有不以幻数 开头的图像ff d8 ff e0(jpg的签名)根据MSDN,我应该可以在我的数据上使用patindex.然而

SELECT TOP 1000 [cpclid]
FROM [cp]
where patindex('FFD8FFE0%', cpphoto) = 0 -- cpphoto is a column type of image
Run Code Online (Sandbox Code Playgroud)

给了我错误

消息8116,级别16,状态1,行1参数数据类型图像对于patindex函数的参数2无效.

找到与幻数不匹配的记录的正确方法是ff d8 ff e0什么?

更新:

这是一个测试您的任何建议的链接.


我罗斯的解决方案最终通过对查询的调整进行了一些调整.

SELECT [cpclid]
  FROM [cp]
where convert(varchar(max), cast(cpphoto as varbinary(max))) not like convert(varchar(max), 0xFFD8FFE0 ) + '%'
Run Code Online (Sandbox Code Playgroud)


我找到了更好的解决方案,请参阅我的回答.

Aar*_*and 6

为什么还在使用IMAGE数据类型?它已被弃用以支持VARBINARY(MAX)...如果您将列转换为VARBINARY(MAX),我认为您会发现它更容易使用.

编辑

在SQL Server 2008中,您可以使用更容易的转换:

SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), cpphoto), 2) FROM cpphoto;
Run Code Online (Sandbox Code Playgroud)

事实上,这在您的StackExchange查询上运行得很好(我怀疑后端不使用SQL Server 2005).

但我很高兴我的回答对你来说没用.注意自己.


Sco*_*ain 6

我找到了一个更简单的解决方案,运行速度更快.

SELECT [cpclid] 
FROM [cp]
where cast(cpphoto as varbinary(4)) <> 0xFFD8FFE0
Run Code Online (Sandbox Code Playgroud)