当前位置: 首页 > 面试题库 >

使用sql参数在SQL LIKE语句中转义特殊字符

韦繁
2023-03-14
问题内容

我有一张桌子,上面放着产品。我需要进行查询,以找到所有与用户输入值匹配的结果。我正在使用SqlParameter输入的插入。

SqlCommand findProcutsByPattern = new SqlCommand(
    "SELECT *" +
    " FROM [Products]" +
    " WHERE ProductName LIKE @pattern", connection);

findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');

当用户输入字符串包含“ _”或“%”时,就会出现问题,因为它们被解释为特殊字符。另一方面,请考虑以下因素:

命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证。与命令文本不同,参数输入被视为文字值,而不是可执行代码。

我不应该有这样的问题。我是否需要替换/转义输入字符串中的所有“ _”和“%”,还是有一个更优雅的解决方案?我希望将输入视为文字。

我在表中有一些记录,这些记录的名称中包含特殊字符(N_EW,N \ EW,N%EW,N” EW,N’EW)。将 ** , ”**
指定为输入效果很好(考虑它们作为文字)。


问题答案:

您有两种选择:

  • 将它们包含在[和中]。所以:
    where pattern like '[%]'
    

查找百分比字符。要转义的字符的完整列表- '_', '%', '[', ']'带有相应的替换'[_]', '[%]', '[[]', '[]]'。可以在转义转义符不起作用的示例代码中找到SQLLIKE运算符

  • 使用不太可能出现在字符串中的转义字符,例如反引号:
    where pattern like '`%' escape '`'
    

(请参阅MSDN- LIKE(Transact-SQL)上的语法。)

在这两种情况下,我都建议您在应用程序层进行替换,但如果您确实需要,也可以在SQL中进行替换:

where pattern like replace(@pattern, '%', '[%]')

而且,就用户界面而言,向最终用户提供通配符访问权限可能是一件好事。

注:有几个比较特殊的字符'-',并'^'在LIKE查询,但他们并不需要,如果你已经逃离转义'['']'



 类似资料:
  • 问题内容: Oracle中是否有一种简单的方法来转义SQL语句中的特殊字符?(即%,&,’)我看到了有关手动转义字符的链接,但我认为Oracle可能提供了一种更简便的方法。 注意:我正在通过ORM生成动态SQL select语句。 问题答案: 如果使用绑定变量和ORM,则应自动处理嵌入的单引号和“&”号。这些是SQL * Plus或SQL * Developer中的特殊字符。 要在查找文字字符%和

  • 我正在使用指南https://www.baeldung.com/rest-api-search-language-rsql-fiql构建基于RSQL的JPA规范。 like子句如下所示: 我的问题是,处理用户输入中转义特殊字符的最佳方法是什么? 例如,如果用户提供了字符串: 上面的代码将翻译为: 我想对字符串中的进行转义,这样它就不会在LIKE子句中被计算为通配符。 以下帖子为每个数据库声明了类似

  • 正如我们所看到的,一个反斜杠 "\" 是用来表示匹配字符类的。所以它是一个特殊字符。 还存在其它的特殊字符,这些字符在正则表达式中有特殊的含义。它们可以被用来做更加强大的搜索。 这里是包含所有特殊字符的列表:[ \ ^ $ . | ? * + ( )。 现在并不需要尝试去记住它们 —— 当我们分别处理其中的每一个时,你自然而然就会记住它们。 转义 如果要把特殊字符作为常规字符来使用,只需要在它前面

  • 问题内容: 我想电视机1 ® 2的outputText: 什么不对?我大写。 问题答案: 您可以选择以下之一 在您最初的建议中,您放错了位置,应该在 您也可以完全删除(但您的(R)不会很小) 最后,您可以直接使用它而无需转义

  • 问题内容: 我们为科学应用程序提供了一个带有较长段落的表格,其中包含诸如符号beta(ß-arrestin)等字符。我们在Mule上运行一个JSON服务,该服务获取数据并持久保存到oracle数据库中。这个带有长段的特殊元素给我RAML / JSON错误。下面是错误 科学家写下的形式元素我们无法控制。因此,在M子方面,我们如何像Java具有URLEncoded一样自动地转义这些字符。非常感谢 问题

  • 我们有一个表单,其中有一个很长的段落,用于包含符号beta(ß-arrestin)等字符的Scientific应用程序。我们有一个在Mule上运行的JSON服务,它获取数据并保存到oracle数据库。这个带有长段落的特殊元素在RAML/JSON中给了我一个错误。下面是错误 科学家们所写的形式元素我们无法控制。因此,在骡子方面,我们如何像java那样自动摆脱这些角色呢。非常感谢