正在转义SQL WHERE子句中的问号(?)

  • 本文关键字:转义 SQL WHERE 子句 sql
  • 更新时间 :
  • 英文 :


在我使用的各种SQL产品中,问号(?)标记查询中的输入参数。

我如何逃避这种行为并搜索包含问号的文本,例如。。。

SELECT *
FROM   A_TABLE
WHERE  A_FIELD = 'This is a question mark not an input parameter?'

上面的问号是一个字面上的问号,而不是占位符。如果答案是特定于产品的,那么我目前正在使用Derby(又名JavaDB)。

您根本不需要逃离?。它与您发布的案例中的WHERE子句没有特殊含义。

如前所述跟在等号后面不会起通配符的作用。要在包含问号的字段中搜索任何行,请使用:

SELECT * FROM A_TABLE
WHERE A_FIELD LIKE '%[?]%'

如果您的用例是检查jsonb列是否具有您指定的键,那么简单地添加?将返回Cause: org.postgresql.util.PSQLException: No value specified for parameter

在mybatis中,解决方案是不使用单个问号(?),而必须使用双问号(??)。

例如:SELECT * from table where jsonb_column ?? 'key'

最新更新