c# - ASP.NET 单文本框多关键词搜索

标签 c# sql asp.net oracle

现在,我有:

Upper(tb.name) LIKE Upper('%' + :SearchBox + '%')

有了这个,我可以输入一个关键字,如果它存在于 tb.name 中,它将在结果中返回。我希望能够在搜索框中输入多个关键字,以空格分隔,并返回包含所有关键字的结果。

示例:我在搜索框中输入“Ford”并返回

Name
2015 Ford SUV Blue
2016 Ford SUV Black
2017 Ford SUV Blue

我希望能够输入“Ford Blue”(或任何其他数量的关键字)以返回

Name
2015 Ford SUV Blue
2017 Ford SUV Blue

输入的任何关键字都将以空格分隔。因此,如果我输入“SUV Blue 2017”,它将是“SUV”AND“Blue”AND“2017”。 非常感谢任何帮助!

最佳答案

您需要拆分关键字字符串并找到所有关键字都存在的行。类似这样的事情(请参阅代码中的注释)。

declare @keywords varchar(max)='ford blue'

--build a series of CTE
;with split as ( --split keyword string into table
select '%'+value+'%' v from string_split(@keywords,' ')
),
cnt as ( -- always single value
select count(*) cnt from split
),
prod as(
select p.* ,
COUNT(t.v) over(partition by p.name) cnt,
ROW_NUMBER() over(partition by p.name order by p.name) rn
from tb p
--where ProductName like all -- illegal and never work
inner join split t on p.ProductName like t.v
)
select * from prod
cross join cnt -- don't afraid of Cartesian product here
where prod.cnt = cnt.cnt -- all keywords found
and rn=1 -- no duplicates

关于c# - ASP.NET 单文本框多关键词搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382544/

相关文章:

c# - 跨多个 HTTP 请求拆分的多步数据库事务

mysql - 插入到具有 auto_increment 列外键的子表

mysql - MySQL中主键和多列索引的优先级?

sql - 为什么我们需要带有聚合函数的 GROUP BY?

带有 ASP.net 回发的 Jquery 对话框

c# - Visual Studio 2019 : Insert multiple C++ style single-line comments

c# - 如何使 Nunit 测试仅在 Linux 操作系统上运行(而不在 Windows 上运行)?

javascript - 如何使用 javascript 获取 html 文件中的 App_Themes 位置

c# - 如何使用动态列执行 LINQ where 子句

c# - 是否可以模拟 Specflow 的 ScenarioContext? (C#)