当我运行此查询时:
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
无法搜索字母?
如果是,那怎么样?
EDIT2:
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+'*"')
答案 0 :(得分:5)
您需要使用星号来执行前缀搜索:
WHERE CONTAINS(Column1 , ' "a*" ');
WHERE CONTAINS(Column1 , ' "A*" ');
除此之外,CONTAINS
还需要使用停用词过滤器。阅读here
禁用词可以是具有特定语言或含义的词 可以是没有语言意义的令牌。例如,在 英语," a," "和" "是" """是 从全文索引中删除,因为它们已知无用 搜索。
要将输入作为参数传递,只需附加星号:
declare @SearchThis varchar(10) = 'A';
set @SearchThis = quotename(@SearchThis + '*', '"');
select @SearchThis;
完成SearchThis设置后,您可以在以下位置使用:
WHERE CONTAINS(Column1, @SearchThis)
答案 1 :(得分:-1)
CONTAINS
比LIKE
强大得多。来自MSDN ...
LIKE与全文搜索的比较
与全文搜索相比,LIKE Transact-SQL谓词有效 仅限于字符模式。此外,您不能使用LIKE谓词 查询格式化二进制数据此外,LIKE查询大 非结构化文本数据的数量远远低于等效数据 针对相同数据的全文查询。对数百万人的LIKE查询 文本数据行可能需要几分钟才能返回;而全文 对于相同的数据,查询只需几秒或更短时间,具体取决于 返回的行数及其大小。另一个 考虑到LIKE只执行一个简单的模式扫描 整张桌子。相比之下,全文查询是语言感知的, 在索引和查询时应用特定的转换,例如 过滤停用词并进行词库和屈折扩展。 这些转换有助于全文查询改善其召回和 他们的结果的最终排名。
对于您的具体问题,您需要其他答案指示的前缀搜索。但是前往我链接的MSDN页面。它会帮助你。