Mysql中如何截取json字符串中指定片段再对其进行模糊查询--SUBSTRING_INDEX(s, delimiter, number)函数的实战运用

应用场景,给你一个表单信息的字符串,如下:

//数据1
{"checkbox_1611194769273":["Option 1","Option 2"],"checkbox_1611194771312":["Option 2","Option 3"]}
//数据2
{"checkbox_1611194769273":["Option 1"],"checkbox_1611194771312":["Option 2"]}
//数据3
{"checkbox_1611194769273":[],"checkbox_1611194771312":["Option 1","Option 2"]}
//数据4
{"checkbox_1611194769273":["Option 1"],"checkbox_1611194771312":[]}

checkbox表示复选框,checkbox_xxx表示不同的复选框,现在需要筛选出,指定复选框勾选Option 1的所有数据?

解答:由于表单是动态的表单,会有很多不同的组件,复选框只是其中之一,生产的数据要比上面例子复制百倍,所有我们的思路是

1.先定位到筛选目标的复选框的数据片段

2.再截取出来其中的数据

3.最后再熊截取的数据中进行模糊查询

这里我们需要使用mysql的SUBSTRING_INDEX(s, delimiter, number)函数。

先举个简单的例子:

//这里表示从目标字符串'a*b*c*d*e'中,正着数第3个'*',截取其左边的字符串
select SUBSTRING_INDEX('a*b*c*d*e','*',3);
//结果为:
a*b*c

//这里表示从目标字符串'a*b*c*d*e'中,倒着数第1个'*',截取其右边的字符串
select SUBSTRING_INDEX('a*b*c','*',-1);
//结果为:
c

//这里表示从目标字符串'a*b*c*d*e'中,倒着数第3个'*',截取其左边的字符串,然后再从截取的字符串中,倒着数第2个'*',截取其右边的字符串
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-2);
//结果为:
b*c

简单的了解了一下用法之后,我们再回到实战问题:

//1.定位到复选框checkbox_1611194769273
select substring_index(t.DATA,'checkbox_1611194769273',-1) from FORM_DATA t

结果为: 

这里是把复选框id右边所有字符都截取出来了。

//再以第一个右中括号‘]’,向左截取字符串
select substring_index(substring_index(DATA, 'checkbox_1611194769273', - 1), ']', 1)
from FORM_DATA t;

结果为:

至此已经把复选框中的字符串搜索出来了,最后只要加上模糊查询即可:

select * from FORM_DATA where 
substring_index(substring_index(DATA, 'checkbox_1611194769273', - 1), ']', 1) 
like '%Option 1%';

结果为: 

好了,查出需要的数据啦,大功告成!

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希文先森

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值