达梦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数组中的所有元素。