mysql 我如何选择所有可能的JSON数据在箭头语法/JSON提取在SQL

hrirmatl  于 2023-01-08  发布在  Mysql
关注(0)|答案(1)|浏览(149)

我需要能够访问所有可用的JSON数据,问题是很多数据都是嵌套的。
我现在有这个疑问。

SELECT * FROM `system_log` WHERE entry->"$[0]" LIKE "%search_term%";

我需要类似entry->"$*"的东西来代替entry->"$[0]"
我认为箭头语法是JSON_EXTRACT的缩写,我认为这意味着提取的解决方案将适用于箭头语法。

{
    " Name": {
        "after": "Shop",
        "before": "Supermarket"
    }
}

这是我的JSON数据的一个例子,正如您所看到的,它有多个级别,这意味着entry->"$[0]"不会捕获它。
SQL的版本8.0.19
到目前为止,我所尝试的是entry->"$[0]",然后在entry->"$[0]"之后预挂[0],但是这种解决方案看起来不是很动态,因为JSON数据可能会变得越来越深。

6g8kf2rb

6g8kf2rb1#

JSON_SEARCH()不适用于您描述的搜索,因为JSON_SEARCH()只搜索完整的字符串匹配项,而不搜索通配符。
如果您真的无法预测JSON的结构,并且只想知道模式'%search_term%'是否出现在任何地方,那么就将整个JSON文档视为一个字符串,并使用LIKE

SELECT * FROM `system_log` WHERE entry LIKE "%search_term%";

如果您有更具体的搜索需求,那么您必须想出一种方法来预测您在JSON文档中搜索的值的路径,这是我无法帮助您的,因为我不知道您如何使用JSON。

相关问题