如何对包含双引号的字符串使用 where like

How to use where like for a string that includes double quotes

在我的 Firebird(2.5 版)table 中有一个 JSON 字符串。我需要搜索以查找整个值是否等于某个值,因此我想在 where 查询中包含双引号。

例如:

SELECT myfield FROM mytable WHERE json like '"%thisIsSomeString%"'

要匹配的示例 JSON:

{"id1":"fake1", "id2":"thisIsSomeString"}

示例 JSON 与 匹配:

{"id1":"fake1", "id2":"thisIsSomeString but with extra data"}

不行,估计是字符串转义的问题。 我使用 FlameRobin 检查了 JSON 值,它似乎是一个普通的 JSON 字符串。

如何实现?

如果您正在寻找字符串 "thisIsSomeString",那么您需要使用 LIKE '%"thisIsSomeString"%'

您尝试的谓词 like '"%thisIsSomeString%"' 查找以 " 开头的值,然后是零个或多个字符,然后是字符串 thisIsSomeString,然后是零个或多个字符,然后然后以 " 结束。这与您的 JSON 值不匹配,因为它们以 { 开头并以 } 结尾,也不符合您查找子字符串 "thisIsSomeString".[=19 的要求=]

既然有简单的工具,为什么要使用复杂的工具来混淆自己和服务器?您在 LIKE 中犯了错误 - 但您只是不必使用它。

您想检查数据库值是否包含某些子字符串 - SQL 正好为您进行了检查。

SELECT myfield FROM mytable 
WHERE json CONTAINING '"thisIsSomeString"'`