0

我有一个表,其中content列由一个 JSON 对象组成,并带有一个示例值:

{"blocks":[{"score":"A"},{"score":"A"},{"score":"B"}]}

我想要做的是SELECT所有分数的字符串表示,所以对于这个例子,我想要:

AAB

我已经能够轻松解析 JSON:

SELECT json_extract(content, '$.blocks[*].score') AS scores

结果是:

["A", "A", "B"]

但由于某种原因,我在将 JSON 数组连接成单个字符串时遇到了问题(除了将其转换为字符串并调用一些替换函数来删除引号和括号)。我尝试了各种变体CONCATGROUP_CONCAT但没有找到解决方案。

将此 JSON 字符串连接成单个字符串的正确方法是什么?

4

1 回答 1

0

您可以使用目录表,例如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   |
+--------+

Demo

于 2021-02-02T21:53:11.117 回答