【问题标题】:How do you use CONCAT within a JSON path for MySQL?如何在 MySQL 的 JSON 路径中使用 CONCAT?
【发布时间】:2019-02-02 05:10:23
【问题描述】:

MySQL 5.7 版

鉴于 h.ent_rollup 长度始终 >=4,并且我想在仅包含单个数组的 JSON 数据字段中获取倒数第二个数组元素:

ent_rollup 的 JSON 值示例:

["15","26","57","28","89","10","11","12"]

例子:我想要这个

SELECT h.`ent_rollup`->>CONCAT('"$[',(JSON_LENGTH(h.`ent_rollup`))-2,']"') FROM hierarchy h

翻译成这个

SELECT h.`ent_rollup`->>"$[6]" FROM hierarchy h

我想找回11,但我收到了这个错误:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 'concat('"$[', 
(json_length(h.`ent_rollup`))-2,']"') from hierarchy h
where h.`en' at line 1

【问题讨论】:

    标签: mysql arrays json path


    【解决方案1】:

    当您使用->> 时,路径必须是文字表达式(尽管文档没有明确说明)。如果要计算路径,请使用JSON_EXTRACT()函数。

    路径中还有额外的 " 字符,这会导致 MySQL 失败(当我在 rextester.com 上尝试时,它会超时等待响应)。

    SELECT JSON_UNQUOTE(JSON_EXTRACT(h.ent_rollup, CONCAT('$[',JSON_LENGTH(h.ent_rollup)-2,']'))) 
    FROM hierarchy h;
    

    【讨论】:

    • 这行得通,谢谢!额外的引号是为了确保 concat 函数将所有内容都用双引号括起来。
    • 这些引号是源代码语法的一部分,它们不是字符串本身的一部分。
    猜你喜欢
    • 2022-01-02
    • 2012-11-07
    • 2012-09-12
    • 2017-10-18
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多