【问题标题】:Iterate through a json array mysql 8遍历一个json数组mysql 8
【发布时间】:2021-02-09 12:22:35
【问题描述】:

我有一个带有 JSON 字段的下表架构,

CREATE TABLE `test` (
      `stats` json NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

我已插入以下内容,

INSERT INTO test VALUES('[{"days": 15, "percentage": 50},{"days": 5, "percentage": 100}]');

我现在想做的是遍历它并返回给定日期的百分比,或者只单独显示每个密钥对值。我该怎么办?

我从here 中找到了以下查询,我试图让它为我的目的工作,但输出不符合预期。理想情况下,我想在这样的查询中执行此操作,而不使用存储过程或其他任何东西,

select stats, i, concat('stats', element) from `test`, json_table(stats, '$[*]' columns (i for ordinality, element varchar(100) path '$')) jt;

因此,如果将 15 作为日期,则输出将为 50。

   day percentage
    15  50

或者在不过滤特定日期的情况下进行迭代时会出现以下结果

   day percentage
    15  50
    5   100 

这是我尝试的fiddle

在我的情况下,这些键是唯一的。

【问题讨论】:

    标签: mysql json mysql-8.0


    【解决方案1】:
    SELECT stats, i, days, percentage
    FROM test, 
         JSON_TABLE(stats, 
                    '$[*]' COLUMNS (i FOR ORDINALITY, 
                                    days VARCHAR(100) PATH '$.days', 
                                    percentage VARCHAR(100) PATH '$.percentage')) jt;
    

    fiddle

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多