我想在我的标签列表中找到一个单词。他们可以在开始,结束或中间,所以我尝试写作。
Where name like "%@0%"
那没用,所以我试过
@"LIKE ""%" + MySql.Data.MySqlClient.MySqlHelper.EscapeString(q) +@"%"
我认为这样有效,所以我尝试搜索%。结果显示我的所有标签,我预计只有标签含有%(因此没有ATM)。
如何正确转义字符串?并用它来搜索文本的中间部分?
-edit -
解决方案如下。我针对一些测试运行它并将它们全部通过。查询是
... where n.name LIKE CONCAT("%", @some_name , "%") ...;
然后在代码中
cmd.Parameters.AddWithValue("@some_name", val.Replace("\\", "\\\\").Replace("_", "\\_").Replace("%", "\\%")));
答案 0 :(得分:1)
您还需要在字符串中转义%
和_
个字符,因为这些字符是LIKE
运算符使用的特殊通配符:
@"LIKE ""%" +
MySql.Data.MySqlClient.MySqlHelper.EscapeString(q)
.Replace("_", "\\_").Replace("%", "\\%") +
@"%"
您可以考虑将此包装在静态方法中以实现可重用性。