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

克里斯·施利特

我有一个表,其中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函数以删除引号和方括号)。我试过的变化CONCATGROUP_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   |
+--------+

Demo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL多行与将值全部存储在一个字符串中

每5个字符分割一个字符串

MySQL Join VIEW,将列连接成一个字符串

当我使用 sprintf 将一个大小为 3 的字符串和一个字符输出到一个大小为 5 的字符串时,出现分段错误(核心转储)

在MySQL中替换字符串中的第一个字符

使用MySQL函数将字符串的第一个字符移动到字符串的末尾

计算一个字符串中不同的5个字符的子字符串的数量

MySQL,PHP 准备好的语句匹配一个字符串

MySQL的Where子句由最后一个字符串

从外部文件向mysql终端输出一个字符串

使用PHP从一个字符串进行多个MySQL更新

MySQL按多少顺序排序像一个字符串

MySQL添加一个字符串作为默认

如何用 MySQL 中另一个字符串和一个字段的串联替换任何字符串

把mysql_fetch_array的值放在一个字符串中,用分隔;

将多个mysql数据组合成一个字符串并用php显示

表中的MYSQL查找值与一个字符串的多个可能的子字符串中的最佳匹配

如何选择一个字符串作为单独的行的一个字符的MySQL

拆分一个字符串,只取 5 个项目。但限制字符<20

我怎样才能一个复选框将一个字符串传递到 MySQL 中?

如何检查一个字符串是否包含至少5个唯一字符并且至少7个字符长?

Oracle中的正则表达式-每5个字符后放一个字符串

如何从文本字段mysql的第二行中选择一个字符串

如果 column1 匹配一个字符串,我需要什么 mysql 函数?

有条件地在mysql select中解析一个字符串

MYSQL-LOAD XML多个重复(重复)标签作为一个字符串

什么是分裂MySQL中的字符串,并获得最后一个字符串的正确方法是什么?

如何用另一个字符串替换字符串并在php和mysql中保持大小写?

搜索字符串mysql db,它可以有空格,可以在另一个字符串中,依此类推