MySQL从jsonarray获取某个字段的所有数据

表结构。表里的order_goods_info_vo_list是jsonarray字段

CREATE TABLE `pdd_charge_back_bantuo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `shopname` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '店铺名',
  `charge_back_sn` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '拒付单号',
  `parent_order_sn` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '订单号',
  `charge_back_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '时间',
  `charge_back_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '原因',
  `region_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '地区名',
  `charge_back_status` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '# 待处理、 已发起申诉,待审核、 已同意拒付请求、 超时未处理,自动同意、 用户拒付请求被拒绝、用户拒付请求已通过',
  `order_goods_info_vo_list` text COLLATE utf8mb4_bin COMMENT '订单产品详情',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

表里该字段样例

[
    {
        "goods_name": "1:12 Doll House Doll Mini Furniture White 5-piece Set Small Bed Rocking Chair Chair Rocking Horse Cabinet",
        "goods_number": 1,
        "sku_attribute": "White 5-piece Set",
        "sku_id": 17592548907138,
        "thumb_url": "https://img.kwcdn.com/product/fancy/8cf58b25-e6c6-444c-a816-7724c0cd0030.jpg"
    }
]

现在业务要求获取其中的sku_id和goods_number字段。
目前思路有两种:①重新解析表里字段放到新表里(直接排除,要么一开始就存好,要么就不要做二次解析,导致多个数据源,串串连接)
②sql解析,这样分页也不会受到影响

方法


SELECT json_extract( order_goods_info_vo_list, '$[*].sku_id' )AS stripped_string
FROM pdd_charge_back_bantuo;

执行结果
在这里插入图片描述
这样虽然获取了所有的值,但是还是有中括号,有点美中不足

二次优化


SELECT SUBSTRING(json_extract( order_goods_info_vo_list, '$[*].sku_id' ), 2, LENGTH(json_extract( order_goods_info_vo_list, '$[*].sku_id' )) - 2) AS sku_id from pdd_charge_back_bantuo

结果
在这里插入图片描述
完美解决问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值