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

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


如果术语“射击”在术语“血液”附近,有没有办法从搜索词中排除。但是,如果术语“镜头”出现在单元格中报表的另一个位置,则不排除该单元格吗?

最佳答案

这实际上不是在基本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]%'

10-04 10:54