gpt4 book ai didi

c# - 使用逻辑运算符的 SQL 搜索

转载 作者:太空狗 更新时间:2023-10-29 17:58:35 25 4
gpt4 key购买 nike

我有一个 asp.net web 应用程序需要一个搜索页面来搜索特定表 (SQL) 中的数据。今天它只有一个简单的 LIKE 查询,使用参数化的 sql:

SqlParameter[] param = new SqlParameter[1];

param[0] = new SqlParameter("@searchText", SqlDbType.VarChar);
param[0].Value = "%" + text + "%";

using (SqlDataReader dr = SqlHelper.ExecuteReader(this.ConnectionString, CommandType.StoredProcedure, "isp_Search", param))
{
//Do something
}

现在我需要在搜索中添加使用逻辑运算符的选项。

因此在文本框中,用户可能会搜索类似

的内容
Adam OR Adams
James AND NOT Jame
Douglas AND (Adam OR Adams)

向表添加全文索引不是首选,因为我无法控制数据模型。

我正在寻找一种方法来解释文本查询并将其转换为具有适当数量的 SqlParam 的 SQL 语句。

searchexpression = "Douglas AND (Adam OR Adams)"
MakeSearchQuery(searchexpression, out sqlquery, out SqlParam[] params)

会返回 somelike like

sqlquery = "SELECT someFields FROM table WHERE someField=@Param1 AND (someField=@Param2 OR someField=@Param3)"

还有一个sqlParams之类的

sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'

现在一定有人做过这样的东西吧?我搜索过 SO 和谷歌,但没有任何真正的成功。欢迎提供指向开源/免费代码或关于如何将搜索表达式转换为 SQL 的好主意。

最佳答案

通过和/或/() 等对查询的解析需要通过某种解析器来完成。对于这么简单的事情,shunting-yard algorithm应该做得很好(这就是我们在对标签过滤 SE 时如何处理 and/or/not 等,尽管对括号子表达式的完整支持仅在内部可用)。这将生成一个操作树,即(这里使用前缀表示,但它更通常用于生成 AST)

and("Douglas", or("adam", "adams"))

然后您需要使用它来生成 TSQL。不是微不足道的,但也不是火箭科学。

关于c# - 使用逻辑运算符的 SQL 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8338921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com