带有单个单词的 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() 不会返回所有预期的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server标量函数将数字转换为带有序数的单词

sql server CONTAINS用法??

带有熊猫字符串列表的 str.contains 的可扩展解决方案

如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?

MS SQL 包含与 & 符号搜索

在 LINQ to SQL 中使用 contains()