当前位置: 首页 > 知识库问答 >
问题:

如何从类SQL子句中转义特殊字符?

封梓
2023-03-14

我正在使用指南https://www.baeldung.com/rest-api-search-language-rsql-fiql构建基于RSQL的JPA规范。

like子句如下所示:

return builder.like(root.get(property), argument.toString().replace('*', '%'));

我的问题是,处理用户输入中转义特殊字符的最佳方法是什么?

例如,如果用户提供了字符串:

*my-search%-term*

上面的代码将翻译为:

%my-search%-term%

我想对字符串中的%进行转义,这样它就不会在LIKE子句中被计算为通配符。

以下帖子为每个数据库声明了类似的特殊字符:

SQL的特殊字符列表

请注意其中一个答案中的评论:

在这里编写与DBMS无关的代码是不可能的,因为你不知道需要转义哪些字符,标准说你不能转义那些不需要转义的字符。(见第8.5/General Rules/3.a.ii节。)

我想知道最好的处理方法是什么?我在生产中使用postgres,在测试中使用h2,但理想情况下不希望解决方案与这两者相关联。

共有2个答案

邰英毅
2023-03-14

在标准SQL中,您只需要转义%和 运算符支持的唯一通配符。

因此,在SQL中应该像这样使用我的搜索词*

WHERE some_column LIKE '%my-search\%-term%' escape '\'

古扬
2023-03-14

为什么不使用正则表达式匹配,而不是像这样?

where col ~ <user input>

听起来您的用户可能更熟悉正则表达式

如果只需要忽略所有通配符功能的精确匹配,可以使用位置:

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

  • 问题内容: 我有一张桌子,上面放着产品。我需要进行查询,以找到所有与用户输入值匹配的结果。我正在使用输入的插入。 当用户输入字符串包含“ _”或“%”时,就会出现问题,因为它们被解释为特殊字符。另一方面,请考虑以下因素: 命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证。与命令文本不同,参数输入被视为文字值,而不是可执行代码。 我不应该有这样的问题。我是否需要替换/转义输入字

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

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

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

  • 问题内容: 有没有一种方法可以将字符串转换为可以在Web文档中正确显示的字符串?例如,更改字符串 至 问题答案: 具有专门为此设计的功能: http://commons.apache.org/proper/commons- lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html