如何从DB2数据库的JSON数组中提取ID值?
DB2中提取嵌套JSON字符串数组内ID的正确方法
问题原因
原查询出错的核心原因是:DTL_PRD列里的ProductList值是被双引号包裹的字符串类型JSON数组,并非原生JSON数组。直接用JSON_VALUE(DTL_PRD,'$.ProductList[*]')无法遍历,因为[*]遍历语法仅适用于原生JSON数组,不能直接作用于字符串格式的JSON文本。
正确解决方案
需要先把ProductList对应的字符串解析为原生JSON数组,再通过JSON_TABLE遍历提取ID:
SELECT P.ID_PROD FROM RTN_PRD, JSON_TABLE ( -- 先提取ProductList的字符串值,再解析为可遍历的JSON数组 JSON_PARSE(JSON_VALUE(DTL_PRD, '$.ProductList')), COLUMNS ( ID_PROD VARCHAR(100) PATH '$.ID' ) ) P
关键说明
JSON_VALUE(DTL_PRD, '$.ProductList'):提取出ProductList字段对应的字符串内容(即"[{\"ID\":\"1111\",...}]")。JSON_PARSE():将上述字符串转换为DB2可识别的原生JSON数组,让JSON_TABLE能通过PATH语法遍历数组内的每个对象。- 若你的DB2版本不支持
JSON_PARSE,可尝试用JSON_SCALAR()替代(适配部分旧版本):SELECT P.ID_PROD FROM RTN_PRD, JSON_TABLE ( JSON_SCALAR(JSON_VALUE(DTL_PRD, '$.ProductList')), COLUMNS ( ID_PROD VARCHAR(100) PATH '$.ID' ) ) P
内容的提问来源于stack exchange,提问作者riann
相关产品推荐
相关产品推荐

