达梦数据库SQL

本文详细介绍了达梦数据库中处理JSON数据的关键函数,如JSON_EXTRACT用于提取特定元素,JSON_TABLE用于转换JSON对象,以及如何处理嵌套对象和数组。还提到了JSON_UNQUOTE函数在去引号处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

JSON_UNQUOTE函数

select id,json_value(party_sup_other_json,'$.content_abstract') from tv_sup_sl_dw_query where json_unquote(json_extract(party_sup_other_json,'$.content_abstract'))  like '%测试%';
  • JSON_UNQUOTE 函数用于从 JSON 格式的字符串中移除引号。
  • JSON_EXTRACT 函数用于从 JSON 文档中提取指定的值。根据 JSON 规范,JSON 中的字符串值是用双引号包围的。

所以当前作为查询条件时必须将引号去掉,尤其时在做等值比较的时候。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值