我有一个用于搜索的选择查询,我的@SearchText可以由几个单词组成
我想将单词分成数组并选择某些文本是否包含我的搜索文本
查询:
ALTER PROCEDURE [dbo].[myStoreProcedure]
@SearchText varchar(100)
AS
BEGIN
SELECT * FROM t0
WHERE
ISNULL(@SearchText, '')='' OR t0.title LIKE '%' +@SearchText + '%')
现在我想要: 如果我搜索字符串'adam smith'或'smith adam'结果必须相同
如何将 @SearchText 转换为数组并从表格中提取行 - t0 ,其中title以任何顺序包含我的@SearchText
答案 0 :(得分:2)
尝试使用CONTAINS运算符:
ALTER PROCEDURE [dbo].[myStoreProcedure]
@SearchText varchar(100)
AS
BEGIN
SELECT * FROM t0
WHERE
ISNULL(@SearchText, '')='' OR CONTAINS(t0.title,@SearchText)
您可以使用CONTAINS运算符进行更通用的搜索。
答案 1 :(得分:1)
当我传输参数时,需要删除双空格并在单词之间添加" OR"像这样:
searchText = searchText.Replace(" ", " ").Replace(" ", " OR ");
command.Parameters.Add("@SearchText", SqlDbType.VarChar, 200).Value = searchText;
在SQL中:
((@SearchText = '""') OR CONTAINS(t0.title, @SearchText))