我有和没有单引号的数据:
saed
sa'ed
我想要两个结果,即用户是否在搜索表单中输入了saed
或sa'ed
。
var lastName = request.LastName.IndexOf("*", 0, StringComparison.InvariantCulture) >= 0
? request.LastName.RemovePercentsign().ReplaceAsterikWithPercentSign()
: request.LastName+ "%";
答案 0 :(得分:1)
如果您想忽略单引号,请将其删除:
lastName.Trim().Replace("'","")
只需将它交换到您目前所拥有的位置:
lastName.Trim()
e.g:
command.Parameters.Add(new SqlParameter("@LastName", lastName.Trim()));
变为:
command.Parameters.Add(new SqlParameter("@LastName", lastName.Trim().Replace("'",""));
现在,您没有费心显示实际检查表格的代码,但我怀疑您还需要执行以下操作:
WHERE REPLACE(column,'''','') LIKE @LastName + '%';
为了避免通过将此替换函数应用于列来强制扫描整个表,您可以考虑创建一个已删除撇号(并对其进行持久化和/或索引)并检查该列而不是主列的计算列(你想保留撇号,而不是完全删除它们,因为你仍然想要正确地显示数据)。
当然你也可能想要处理一组其他字符,例如如果有人输入Moseley-Williams
或MoseleyWilliams
,您是否希望Moseley-Williams
和MoseleyWilliams
都回来?智能撇号(’
)怎么样?在搜索过程中,任何人可能在数据输入时间或放入的错误字符怎么办?是否要更正Sm"th
或Sm"ith
等用户类型?
答案 1 :(得分:1)
如果您更改查询文本以包含SQL函数REPLACE
,则可以尝试实现目标假设您的命令文本如下
string cmdText = "SELECT * FROM customers WHERE REPLACE(LastName, '''', '') LIKE @lastname";
现在,如果您准备参数@lastname
,请删除其值中显示的所有引号,例如Mr Bertrand建议
command.Parameters.Add(new SqlParameter("@lastname", lastName.Trim().Replace("'",""));
您将检索上面测试集中的所有记录。 请注意检查此查询的性能,因为我强烈认为以这种方式使用REPLACE会杀死任何类型的优化器
答案 2 :(得分:-1)
基本上你必须检查单引号是否存在,然后再添加两个并将其插入数据库:
使用lastName.Contains("\'")
来chcek并使用lastName.Replace("'","''")