如何使用select with like condition搜索一些没有优先级状态的单词

时间:2015-12-31 09:50:19

标签: sql-server tsql search

我创建了一个商店程序,它使用%而不是'来获得句子和单词。 '

create proc Mysp_SearchIn_Comments
@text nvarchar(max)
as
set @text = REPLACE(@text ,' ', '%')

select text from tblMediaComments
where Text like 
'%'+@text+'%'

它很好但问题是当我搜索类似:'坏男孩'  ,结果是评论包含男孩坏了  ,我还需要在坏男孩后时显示评论 我需要像谷歌算法这样的高级搜索!

感谢。

2 个答案:

答案 0 :(得分:0)

您需要全文搜索。 它为您提供了大部分精彩的搜索功能。

(来源MSDN)

比较LIKE到全文搜索

与全文搜索相比,LIKE Transact-SQL谓词仅适用于字符模式。此外,您不能使用LIKE谓词来查询格式化的二进制数据。此外,针对大量非结构化文本数据的LIKE查询比针对相同数据的等效全文查询慢得多。对数百万行文本数据的LIKE查询可能需要几分钟才能返回;而对于相同的数据,全文查询只需几秒或更短时间,具体取决于返回的行数。

看看这个......

MSDN Full-Text Search

答案 1 :(得分:0)

在这种情况下,您需要使用动态sql。

DECLARE @text NVARCHAR(max) = 'bad after boy'
    ,@sql NVARCHAR(max)

SET @text = '''%' + REPLACE(@text, ' ', '%'' or [Text] like ''%') + '%''';
SET @sql = 'select text from tblMediaComments where [Text] like ' + @text;

EXEC @sql

查询将如下所示:

select text from tblMediaComments where [Text] like '%bad%' or [Text] like '%after%' or [Text] like '%boy%'