MySQL 5.7 将 JSON 字符串的值连接成一个字符串

MySQL 5.7 Concatenate values of JSON string into one string

我有一个 table,其中 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 字符串连接成一个字符串的正确方法是什么?

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