在SQL中混合使用Like和Not Like

3

我正在尝试搜索一个包含犯罪报告的自由文本列。我想识别出枪击,但不是血红的眼睛。我的希望是,如果“shot”这个词没有和“blood”连在一起,就可以选择该行数据,但是如果“shot” 和“blood”连在一起,就排除掉该行数据。我相信下面的代码会排除掉包含“blood shot”的行,即使在报告中多次提到了“shot”。

(Narrative LIKE '%[^a-z]Shot[^a-z]%' and Narrative Not Like '%[^a-z]Blood?Shot[^a-z]%')

如果词项“shot”靠近词项“Blood”,是否有一种方法可以从搜索结果中排除该单元格。但是,如果该单元格中的其他位置出现了词项“shot”,则不要排除该单元格?


2
请在您的问题中标记您正在使用的数据库。您的模式不是标准的 LIKE 模式。 - Gordon Linoff
1个回答

2

这不应该在基础SQL中进行 -- 数据库对于此类字符串操作不是很擅长。您可能需要研究一下数据库的全文索引功能。

但我认为最简单的方法是:

where replace(lower(narrative), 'blood shot', '') like '%shot%'

也就是说,从字符串中删除 "blood shot",然后进行检查。
您可能仍然希望在 "shot" 周围有分隔符。也许可以这样做:
where concat(' ', replace(lower(narrative), 'blood shot', ''), ' ') like '%[^a-z]shot[^a-z]%'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接