我目前正在使用
select *
from movies
where contains(Name, @SearchText)
但它不适用于jaw
我还在存储过程中将任何空格转换为AND以支持多个单词:
set @SearchText = REPLACE(@SearchText, ' ', ' and ')
也可能导致它
电影表格:
ID Name
---------------------
1 Jaws
2 Jaws 2: The revenge
3 Jaws 3-D
4 Rocky 5000
我在存储过程中有这个逻辑,@SearchText
是可选的,默认为null。这也会引发错误:
空或全文谓词。
答案 0 :(得分:0)
评论后编辑回答
CREATE TABLE #movies(
ID int,[Name] varchar(100))
INSERT #movies (ID,[Name])
VALUES (1,'Jaws'),
(2,'Jaws 2: The revenge'),
(3,'Jaws 3-D'),
(4,'Rocky 5000')
DECLARE @SearchText nvarchar(100) = 'jaws revenge ';
--Remove spaces at the beginning and end
SET @SearchText = RTRIM(LTRIM(@SearchText));
--Replace spaces to build search string
SET @SearchText = REPLACE(@SearchText,' ','%'' AND [Name] LIKE ''%')
--Finish building sql query
SET @SearchText = 'SELECT * FROM #movies WHERE [Name] LIKE''%' + @SearchText + '%'''
--Execute query
EXEC sp_executesql @SearchText
DROP TABLE #movies
答案 1 :(得分:0)
我在代码而不是在sql中使用正确的包含语法
解决了这个问题我认为这个问题是由于没有在每个单词周围包装双引号并添加通配符。
private static string PrepareSearchText(string searchText)
{
if (string.IsNullOrEmpty(searchText))
return "\"*\"";
searchText = searchText.Trim();
string rv = string.Empty;
foreach (var item in searchText.Split(' '))
rv += $"\"{item}*\" and ";
return rv.Remove(rv.Length - 5);
}