Oracle SQL如何按条件解析JSON数组中对应字段的值?
根据条件从JSON数组中提取对应值的解决方案
不同数据库有不同的JSON处理函数,以下是主流数据库的实现方式:
SQL Server
使用OPENJSON将JSON数组拆分为行,再通过筛选条件匹配目标项:
SELECT j.subkey2 FROM table1 CROSS APPLY OPENJSON(column1, '$.key1') WITH ( subkey1 NVARCHAR(100) '$.subkey1', subkey2 NVARCHAR(100) '$.subkey2' ) AS j WHERE j.subkey1 = 'interestedvalue1';
OPENJSON会解析key1对应的数组,WITH子句定义要提取的字段,最后通过WHERE筛选出subkey1匹配的行,即可得到对应的subkey2。
MySQL (8.0+)
利用JSON_TABLE函数将JSON数组转换为关系型临时表,再筛选目标值:
SELECT j.subkey2 FROM table1, JSON_TABLE( column1, '$.key1[*]' COLUMNS ( subkey1 VARCHAR(100) PATH '$.subkey1', subkey2 VARCHAR(100) PATH '$.subkey2' ) ) AS j WHERE j.subkey1 = 'interestedvalue1';
JSON_TABLE遍历数组中的每个元素,将指定的JSON键映射为列,后续通过常规的WHERE条件过滤即可。
PostgreSQL
通过jsonb_array_elements(或json_array_elements)拆分数组,再筛选匹配项:
SELECT (j->>'subkey2') AS subkey2 FROM table1, jsonb_array_elements(column1::jsonb->'key1') AS j WHERE (j->>'subkey1') = 'interestedvalue1';
先将列转换为jsonb类型,用jsonb_array_elements把数组拆成独立的JSON对象,再通过->>提取字符串值进行筛选,最终得到目标subkey2。
内容的提问来源于stack exchange,提问作者Anand Rockzz
相关产品推荐
相关产品推荐

