如何搜索图像/varbinary字段以二进制模式开始的记录



我试图找到所有不以神奇数字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

给出错误

留言8116,16层,状态1,线路1参数数据类型image对于patindex函数的参数2无效。

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

:

这里有一个链接,可以测试您的任何建议。


I Ross的解决方案最终在查询中进行了一些调整。

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

我找到了一个更好的解决方案,看看我的答案。

我找到了一个运行速度快得多的简单解决方案。

SELECT [cpclid] 
FROM [cp]
where cast(cpphoto as varbinary(4)) <> 0xFFD8FFE0

为什么还在使用IMAGE数据类型?它已被弃用,取而代之的是VARBINARY(MAX)…如果你把你的列转换为VARBINARY(MAX),我想你会发现它更容易工作。

编辑

在SQL Server 2008中,你可以使用一个更简单的转换:
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), cpphoto), 2) FROM cpphoto;

事实上这在你的StackExchange查询上工作得很好(我怀疑后端没有使用SQL Server 2005)

但我很高兴我的回答对你没用。自注

where子句中使用where cpphoto not like 'FFD8FFE0%'

cppphoto转换为varchar(max),如果它已经不是字符串。

相关内容

  • 没有找到相关文章

最新更新