簡體   English   中英

MySQL 5.7 將 JSON 字符串的值連接成一個字符串

[英]MySQL 5.7 Concatenate values of JSON string into one string

我有一個表,其中content列由 JSON object 組成,並帶有示例值:

{"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 字符串連接成單個字符串的正確方法是什么?

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

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM