达梦JSON函数技术文档
SQL中关键词处理
-- 必须要使用双引号包裹
select id,"comment" from t_cmp_rd_process;select id,"commit" from t_cmp_rd_gjj_eva;
JSON_EXTRACT函数
-- party_sup_other_json 是包含JSON数据的列名。
-- '$.content_abstract' 是JSON路径,用于指定要提取的元素。
select id,json_value(party_sup_other_json,'$.content_abstract') from tv_sup_sl_dw_query where json_extract(party_sup_other_json,'$.content_abstract') != 'null';
JSON_TABLE函数
-- tv_sup_sl_dw_query 是包含JSON数据的表名。
-- tv.party_sup_other_json是包含JSON数据的列名。
-- '$.parents[*]' 是指向JSON对象中需要转换的部分的路径。
-- COLUMNS 子句定义了转换后的虚拟表的列名和数据类型,以及它们在JSON对象中的路径。
-- as pjson 为转换后的虚拟表指定了一个别名,以便在查询中引用。
select tv.sup_record_id,pjson.status from tv_sup_sl_dw_query tv,json_table(tv.party_sup_other_json,'$.parents[*]' columns(status varchar(50) path '$.status',directly int path '$.directly')) as pjson
where pjson.status = 'yqs'
{ "orderNumber": "12345", "customer": { "name": "John Doe", "email": "johndoe@example.com" }, "items": [ { "productId": "A001", "quantity": 2 }, { "productId": "A002", "quantity": 1 } ]
}
SELECT o.order_id, jt.orderNumber, jt.customer.name, jt.customer.email, jt.items.productId, jt.items.quantity
FROM orders o,
JSON_TABLE( o.order_details, '$' COLUMNS ( orderNumber VARCHAR2(50) PATH '$.orderNumber', customer OBJECT PATH '$.customer' COLUMNS ( name VARCHAR2(100) PATH '$.name', email VARCHAR2(100) PATH '$.email' ), items NESTED PATH '$.items[*]' COLUMNS ( productId VARCHAR2(10) PATH '$.productId', quantity NUMBER PATH '$.quantity' ) )
) AS jt;
请注意,对于嵌套的对象和数组,你可能需要使用OBJECT PATH和NESTED PATH子句来正确解析它们。此外,[*]用于表示JSON数组中的所有元素。