我试图找到所有不以神奇数字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)
,如果它已经不是字符串。