Is contains 相当于 SQL Server 中的 Like

Posted

技术标签:

【中文标题】Is contains 相当于 SQL Server 中的 Like【英文标题】:Is Contains Equivalent To Like In SQL Server 【发布时间】:2016-03-05 20:06:51 【问题描述】:

当我运行这个查询时:

Select * from Table1 Where Column1 Like 'aaa%' --3 Result
Select * from Table1 Where Column1 Like 'a%' --3 Result
Select * from Table1 Where Column1 Like 'A%' --3 Result

但是当我跑步时

Select * from Table1 Where Contains(Column1 ,'aaa') --3 Result
Select * from Table1 Where Contains(Column1 ,'a') --0 Result
Select * from Table1 Where Contains(Column1 ,'A') --0 Result

CONTAINS可以搜索:As Per MSDN

    一个词或短语。 单词或短语的前缀。 一个词靠近另一个词。

这是否意味着Contains 不能搜索字母?

如果是,那怎么办?

编辑2:

declare @param as varchar(20)='a'
select * from table1 where Contains(column1,@param)

这是有效的,

declare @param as varchar(20)='"a*"'
select * from table1  where Contains(column1,@param)

但是,这不是

declare @param as varchar(20)='a'
select * from table1  where Contains(column1,@param+'*')

还有,

select * from table1  where Contains(column1,'"'+@param+'*"')

【问题讨论】:

根据docs:Searches for precise or fuzzy (less precise) matches to single words and phrasesa 可能会被视为噪音/stop-word 并被忽略。试试contains(column, 'a*') 您需要在搜索字符串中包含双引号。查看我的答案链接到的 MSDN 页面上的示例。这些应该可以帮助你。 【参考方案1】:

您需要使用星号来执行前缀搜索:

WHERE CONTAINS(Column1 , ' "a*" ');
WHERE CONTAINS(Column1 , ' "A*" ');

除此之外,CONTAINS 还受停用词过滤器的约束。阅读那些here

停用词可以是在特定语言中具有含义的词,也可以是 可以是没有语言意义的记号。例如,在 在英语中,诸如“a”、“and”、“is”和“the”之类的词是 被排除在全文索引之外,因为它们被认为是无用的 搜索。

要将输入作为参数传递,只需附加星号:

declare @SearchThis varchar(10) = 'A'; 
set @SearchThis = quotename(@SearchThis + '*', '"');
select @SearchThis;

一旦你有了 SearchThis 设置,你就可以在哪里使用:

WHERE CONTAINS(Column1, @SearchThis)

【讨论】:

如果有人需要将字符串“A”作为参数传递,那么语法应该是什么? WHERE CONTAINS(Column1, @SearchThis + '*'),不起作用,+ 附近的语法不正确【参考方案2】:

CONTAINSLIKE 强大得多。来自MSDN...

LIKE 与全文搜索的比较

与全文搜索相比,LIKE Transact-SQL 谓词有效 仅在字符模式上。此外,您不能使用 LIKE 谓词 查询格式化的二进制数据。此外,针对一个大型的 LIKE 查询 非结构化文本数据的数量比等价的要慢得多 针对相同数据的全文查询。针对数百万的 LIKE 查询 多行文本数据可能需要几分钟才能返回;而全文 针对相同的数据,查询可能只需要几秒钟或更短的时间,具体取决于 返回的行数及其大小。其他 考虑是 LIKE 只执行一个简单的模式扫描 整张桌子。相比之下,全文查询是语言感知的, 在索引和查询时应用特定的转换,例如 过滤停用词并制作词库和屈折扩展。 这些转换有助于全文查询提高召回率和 他们的结果的最终排名。

对于您的具体问题,您需要其他答案指示的前缀搜索。但请前往我链接的 MSDN 页面。它会帮助你。

【讨论】:

以上是关于Is contains 相当于 SQL Server 中的 Like的主要内容,如果未能解决你的问题,请参考以下文章

Flink SQL xxx is not serializable. The object probably contains or references non serializable field

Flink SQL xxx is not serializable. The object probably contains or references non serializable field

执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c

MySQL出现“SELECT list is not in GROUP BY clause and contains xxx”错误提示

MySQL报错1055- Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated colum

MySQL报错1055- Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated colum