asp.net - 在存储过程的基础上,以空白为基础,筛选值

  显示原文与译文双语对照的内容
0 0

假设在列 Name 中有 3个记录,名为'问题','大问题'和'非常大的问题',我想在 stored procedure 中筛选。 我的SP可以接受一个参数,即 @p,我想根据该参数查找记录。 我被困在我应该找到'非常大的问题'的情况下,如果我得到参数

  1. VE ( 作为'非常'开头有')
  2. BI ( 作为'大'开头')
  3. PRO ( 随着问题的开始'PRO )

一个解决方案可能是 Where name like '%' + @p + '%' 但是,如果我搜索'菲尔'并为参数作为'ph值',结果将为'菲尔'和'约瑟夫',这两个结果都是'ph值'关键字。 是否有解决方案在我使用 ADO.Net 时,C# 解决方案也会受到欢迎。

我的目标

如果我搜索'然后'非常大的问题应该是一个结果,如果我使用 name like @p + '%' 但同样的结果应该在'版本','bi'和'专业'上。 它像分割空白上的值和匹配每个单词的结果。

我可以给 C# 举个例子:

string name = 'VERY BIG PROBLEM';
string[] terms = name.Split(' ');

注意 term array 包含 3个值;即'非常'。'大'和'问题'。

所以如果我搜索'版本'。'bi'或者'专业',它应该会给我同样的结果。 如果还不清楚,假设我们想搜索一个 cricketer'亚伯拉罕。本杰明。devilliers'的名称。 让我的参数为'abrah','benj'或者'开发';它应该搜索'亚伯拉罕。本杰明。Devilliers'。

时间:原作者:6个回答

0 0

如果你想搜索像从你可以使用 @p+'%' 一样使用 @ankit. 建议

如果你想要 C# 解决方案,因为你将获得更多的数据,然后过滤掉。 你可以使用 linq 过滤数据。

你可以在linq中使用 StartsWith 筛选数据
示例:- 如何改进这里LINQ查询以查找搜索结果。

编辑 1

你可以在 or clouse中组合两个条件

 (LIKE '%[^a-z]'+@p+'[^a-z]%') OR (LIKE @p +`%`)

引用:搜索"全字匹配",SQL Server 类似 Pattern 。

你还可以使用

[MyColumn] Like '% '+ @p +' %' 
OR [MyColumn] Like '% '+ @p 
OR [MyColumn] Like ' %' 
OR [MyColumn] = @p

编辑:( 仅用于ascii字符) 可以采用的替代方法:

'#'+[MyColumn]+'#' like '%[^a-z0-9]'+ @p+'[^a-z0-9]%'

引用只匹配具有类似

原作者:
...