传递特殊字符 [duplicate] 时,无法使用 like 运算符在 sql 查询中搜索特殊字符 ( _ , [, %)

Unable to search using like operator for special characters ( _ , [, %) in sql Query when passing special characters [duplicate]

提问人:Shashimk 提问时间:11/14/2023 最后编辑:CharliefaceShashimk 更新时间:11/14/2023 访问量:115

问:

我遇到了 sql server 的问题,当我们使用 like 运算符并使用 dapper 查询以下特殊字符时:_(下划线)、%(百分位数)、方括号 ([) 请考虑以下情况:
案例 1。当我们搜索 %(百分位数)和 _(下划线)时,查询将检索所有记录,而不是匹配的记录。

在 SQL 事件探查器中生成的查询

where @Name like N'%%%', for percentile
where @Name like N'%_%', for underscore

案例 2.当我们搜索“[”(方括号)时,查询不会返回任何记录。

在 SQL 事件探查器中生成的查询

 where @Name like N'%[%', for square bracket

代码

var query =$"select * from TableName where 1=1";  
    DynamicParameters dynamicParameters = new DynamicParameters();
    dynamicParameters.Add("Name", "%" + inputRequest.Name + "%");
   if (!string.IsNullOrEmpty(inputRequest.Name))
       query += $" And CP.Name like @Name";

如何修改 SQL 搜索查询以处理这些特殊字符(%、_、[)并检索预期结果?

C# SQL SQL服务器 类SQL的

评论

0赞 jmcilhinney 11/14/2023
您的问题专门针对 SQL 而不是 C#,但它被标记为 C# 而不是 SQL。
2赞 jmcilhinney 11/14/2023
“%”和“_”字符本身就是通配符,因此可能需要对它们进行转义。我想括号也需要转义。转义单引号涉及用另一个单引号作为前缀,所以我猜你也必须把其他字符加倍,但你可以通过阅读数据库的文档来检查。
0赞 Palle Due 11/14/2023
我刚刚找到了一些旧代码,其中我有类似.这似乎有效,但它是 SqlCe。这里的区别在于 % 是查询的一部分,而不是参数。LIKE '%' + @Name + '%'
0赞 Shashimk 11/14/2023
Microsoft 宣布 SQL Server Compact Edition 已被弃用。对 SQL Server Compact 4.0 的扩展支持已于 2021 年 7 月 13 日结束
0赞 Martin Smith 11/14/2023
如果你要附加前导和尾随,那么你最好不要打扰它,只是使用,这样你就不必转义任何东西了%CHARINDEX(@Name , CP.Name) > 0

答: 暂无答案