如何在mysql的json路径中使用concat?

n9vozmp4  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(525)

mysql 5.7版
考虑到h。 ent_rollup 长度总是>=4,我想在只包含单个数组的json数据字段中获取倒数第二个数组元素:
的json值示例 ent_rollup :

["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
r1zk6ea1

r1zk6ea11#

当你使用 ->> 路径必须是一个文本表达式(尽管文档没有明确说明)。如果要计算路径,请使用 JSON_EXTRACT() 功能。
你还有额外的 " 路径中的字符,这会导致mysql失败(当我在rextester.com上尝试时,等待响应超时)。

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

相关问题