【问题标题】:Is Contains Equivalent To Like In SQL ServerIs contains 相当于 SQL Server 中的 Like
【发布时间】: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

  1. 一个词或短语。
  2. 单词或短语的前缀。
  3. 一个词靠近另一个词。

这是否意味着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+'*"')

【问题讨论】:

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

标签: sql sql-server contains sql-like


【解决方案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 页面。它会帮助你。

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 2011-07-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2010-10-25
    • 2011-03-27
    相关资源
    最近更新 更多