【发布时间】:2014-07-07 03:14:46
【问题描述】:
假设我在Name 列中有 3 条记录,分别名为“问题”、“大问题”和“非常大问题”,并且我想在 stored procedure 中进行过滤。我的 SP 可以带一个参数,即@p,我想根据该参数查找记录。如果我得到参数,我就会发现“非常大的问题”
- VE(因为 'VERY' 以 'VE' 开头)
- BI(因为“BIG”以“BI”开头)
- PRO(因为 PROBLEM 以“PRO”开头)
一种解决方案可能是使用Where name like '%' + @p + '%',但它可能会产生不希望的结果,例如如果我搜索“Phil”并将参数指定为“Ph”,那么结果将是“Phil”和“Joseph”,因为两者都有“Ph”关键词。有什么解决办法吗?由于我正在使用ADO.Net,C# 解决方案也值得赞赏。
我的目标
如果我搜索“VE”,那么如果我使用name like @p + '%',结果应该是“非常大的问题”,但同样的结果也应该出现在“VE”、“BI”和“PRO”上。这就像在空白处拆分值并匹配每个单词的结果。
我可以举个 C# 例子:
string name = 'VERY BIG PROBLEM';
string[] terms = name.Split(' ');
注意term 数组包含 3 个值;即“非常”、“大”和“问题”。
因此,如果我搜索“VE”、“BI”或“PRO”,它应该会得到相同的结果。如果仍然不清楚,假设我们要搜索板球运动员“Abraham Benjamin Devilliers”的名字。让我的参数是“Abrah”、“Benj”或“Dev”;它应该为我搜索“Abraham Benjamin Devilliers”。
【问题讨论】:
-
不确定你想要什么 @p like '%' + @p +%?为什么要使用 @p 而不是 Name,因为记录存储在 Name 列中?
-
已编辑,感谢您的关注。
-
好的。现在,像“%PH%”这样的名称是什么意思,因为列名只有三个,VE、BI 和 PRO?请分享你的目标。你想达到什么目标?
-
如果你只想匹配开头的字母,那么你必须尝试像@p + '%' 这样的东西。这可能会对您有所帮助。
-
更新问题以使其更具描述性。
标签: asp.net sql stored-procedures ado.net