带有单个单词的 SQL Contains() 不会返回所有预期的行
Posted
技术标签:
【中文标题】带有单个单词的 SQL Contains() 不会返回所有预期的行【英文标题】:SQL Contains() with a single word does not return all expected rows 【发布时间】:2019-12-15 04:24:51 【问题描述】:我正在运行一个简单的 SQL 包含搜索,结果不包括所有预期的行。
我所需要的只是一个与 LIKE %word% 工作方式相同的搜索。
SELECT *
FROM [MyTable] where contains(Name, N'walmart')
通过运行此选择,返回的行似乎只包含带有“walmart”的名称,其前后有空格或某种其他分隔符,如句点(“walmart.com”)。这里没问题。
但是没有返回一行,其值为“mywalmart”。为什么此行无法通过包含搜索返回?如果我使用name LIKE '%walmart%'
,它工作得很好。
我需要如何修复包含搜索才能使其正常工作?
【问题讨论】:
见docs.microsoft.com/en-us/windows/win32/search/… @PM77-1 很好的参考,但它特别指出不能在单词前面使用通配符进行后缀匹配。 【参考方案1】:Contains 不会按照你的想法工作,就你的目的而言,LIKE 是最好的。
请参阅docs:
CONTAINS 可以搜索:
一个词或短语。 单词或短语的前缀。 一个词靠近另一个词。 从另一个词屈折产生的词(例如,单词 drive 是drives、driven、driving 和driven 的屈折词干)。 使用同义词库作为另一个词的同义词的词(例如,“金属”一词可以有“铝”和“钢”等同义词)。【讨论】:
以上是关于带有单个单词的 SQL Contains() 不会返回所有预期的行的主要内容,如果未能解决你的问题,请参考以下文章
带有熊猫字符串列表的 str.contains 的可扩展解决方案