我有一个表,其中content
列由JSON对象组成,并带有示例值:
{"blocks":[{"score":"A"},{"score":"A"},{"score":"B"}]}
我想做的是SELECT
所有分数的字符串表示形式,因此对于此示例,我想要:
AAB
我已经能够轻松解析JSON:
SELECT json_extract(content, '$.blocks[*].score') AS scores
结果是:
["A", "A", "B"]
但是由于某种原因,我在将JSON数组连接为单个字符串时遇到了问题(除了将其转换为字符串并调用一些replace函数以删除引号和方括号)。我试过的变化CONCAT
和GROUP_CONCAT
,但还没有找到一个解决方案。
将这个JSON字符串合并为单个字符串的正确方法是什么?
您可以使用目录表(例如)information_schema.tables
来生成要按数组长度进行迭代的行,然后使用来聚合所有成员,GROUP_CONCAT()
例如
SELECT GROUP_CONCAT(
JSON_UNQUOTE(
JSON_EXTRACT(content,
CONCAT('$.blocks[', i - 1, '].score'))
)
SEPARATOR '') AS scores
FROM (SELECT JSON_LENGTH(JSON_EXTRACT(content, '$.blocks[*].score')) AS len,
@i := @i + 1 AS i,
content
FROM tab
JOIN information_schema.tables
JOIN (SELECT @i := 0) AS i) AS t
WHERE i <= len;
+--------+
| scores |
+--------+
| AAB |
+--------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句