我有一个电子邮件文本框,通过它我可以执行搜索。如果我键入a_Scott结果是开始的电子邮件:a_Scott但我得到了
a.scott,
ajscott,
arscott。
这是我的代码:
if (!string.IsNullOrWhiteSpace(request.EmailAddress))
{
var email = request.EmailAddress.IndexOf("*", 0, StringComparison.InvariantCulture) >= 0
? request.EmailAddress.RemovePercentsign().ReplaceAsterikWithPercentSign()
: request.EmailAddress + "%";
command.Parameters.Add(new SqlParameter("@Email", email.Trim()));
}
答案 0 :(得分:6)
原因是您正在使用SQL LIKE运算符。
如果您看一下LIKE documentation,您会发现'_'字符具有特殊含义,需要像使用百分号一样进行转义。
_(下划线) - 任何单个字符。
要转义_
字符,只需使用方括号,如[_]
。
所以你的查询会变成这样:
SELECT *
FROM Users
WHERE email LIKE '%a[_]Scott%'
答案 1 :(得分:0)
这是一个用来清理理解的小提琴 http://sqlfiddle.com/#!6/d88af/4