如何使用MySQL的JSON_EXTRACT提取JSON数组指定索引区间的值
提取MySQL JSON数组指定索引范围的元素
MySQL的JSON_EXTRACT不支持$[1]..$[3]这种范围路径语法,你可以通过以下两种方式实现需求:
方法1:显式指定多个索引
直接在JSON_EXTRACT的路径参数里列出目标索引,用逗号分隔:
SELECT JSON_EXTRACT('[10, 20, 30, 40,50, 60]', '$[1]', '$[2]', '$[3]');
执行后会返回[20, 30, 40],正好是原数组索引1到3的元素。
方法2:使用JSON_TABLE(MySQL 8.0及以上版本)
如果数组长度不固定,或者需要更灵活的范围筛选,可以用JSON_TABLE将JSON数组转换为关系型表结构,再通过条件筛选目标行:
提取为逗号分隔的字符串
SELECT GROUP_CONCAT(value SEPARATOR ', ') AS result FROM JSON_TABLE( '[10, 20, 30, 40,50, 60]', '$[*]' COLUMNS ( idx FOR ORDINALITY, value INT PATH '$' ) ) AS jt WHERE idx BETWEEN 2 AND 4;
返回结果:20, 30, 40
提取为JSON数组格式
如果需要保持JSON数组的格式,用JSON_ARRAYAGG聚合结果:
SELECT JSON_ARRAYAGG(value) AS result FROM JSON_TABLE( '[10, 20, 30, 40,50, 60]', '$[*]' COLUMNS ( idx FOR ORDINALITY, value INT PATH '$' ) ) AS jt WHERE idx BETWEEN 2 AND 4;
返回结果:[20, 30, 40]
注意:
FOR ORDINALITY生成的索引从1开始,所以对应原JSON数组的索引1到3,需要筛选idx BETWEEN 2 AND 4。
内容的提问来源于stack exchange,提问作者AKA
相关产品推荐
相关产品推荐

