在SQL中像喜欢和不喜欢混合

时间:2019-10-28 17:28:10

标签: sql

我正在尝试搜索包含犯罪报告的自由文本列。我想识别枪支射出的东西,而不是枪血。我希望排除的是“射击”一词,如果说是“血液射击”,但如果在报告的其他地方使用了射击,则仍选择该行。我相信,即使多次提到“ shot”,如果找到“ blood shot”,下面的代码也会排除该行。

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

如果术语“射击”在术语“血液”附近,是否可以从搜索词中排除。但是,如果术语“镜头”出现在单元格中报表中的其他位置,则不排除该单元格?

1 个答案:

答案 0 :(得分:2)

这实际上不是您在基本SQL中应该做的事情-数据库不是很好的字符串操作。您可能想研究数据库上的全文本索引功能。

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

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

也就是说,从字符串中删除“鲜血”,然后进行检查。

您可能仍希望在“ shot”周围有定界符。也许:

where concat(' ', replace(lower(narrative), 'blood shot', ''), ' ') like '%[^a-z]shot[^a-z]%'