为了账号安全,请及时绑定邮箱和手机立即绑定

有没有人遇到过这个问题哈!mysql 查询中如何使用正则查询匹配特定字符?跪求!

有没有人遇到过这个问题哈!mysql 查询中如何使用正则查询匹配特定字符?跪求!

慕婉清6462132 2019-10-08 12:48:37
表中一个字段存储了json格式的数据,如tasks字段,每个人的任务是一个数组,也就是转换成json后的{}:[{"create_time":"2019-08-2716:24:51","finish_time":"2019-08-2912:51:47","task_result":"AGREE","task_status":"COMPLETED","taskid":"62047012545","userid":"0637661208752994"},{"create_time":"2019-08-2716:24:43","task_result":"NONE","task_status":"CANCELED","taskid":"62053477946","userid":"V00_1400815737560"}]现在想通过regexp匹配到指定用户的记录,比如我想查找其中是否存在(用户V00_1400815737560已同意):"task_result":"AGREE"和"userid":"V00_1400815737560"的记录。需要注意的是以上两个条件必须属于一个用户,也就是在一个{}中。请问可以使用mysql的regexp进行这样的查找吗?==========================================================目前查询sql,有一个缺点是可能会匹配到两个{}里,也就是第一个{}匹配到了"task_status":"RUNNING",第二个{}匹配到了"userid":"%%s":select*fromt_xxwheretasksregexp'"task_status":"RUNNING".+"userid":"%%s"';
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

如果多个字段的话,用正则很麻烦。要写很长
SELECT*FROMmytableWHEREmycolumnREGEXP"{[^{}]*(\"task_result\":\"AGREE\"[^{}]*\"userid\":\"V00_1400815737560\"|\"userid\":\"V00_1400815737560\"[^{}]*\"task_result\":\"AGREE\")[^{}]*}";
                            
查看完整回答
反对 回复 2019-10-08
?
HUH函数

TA贡献1836条经验 获得超4个赞

如果没有嵌套json且每一项的值都可以保证不含字符}的话可以把正则里的.+替换成[^}]+。否则会非常麻烦
此外还需要保证json序列化的时候task_status始终在userid前面
                            
查看完整回答
反对 回复 2019-10-08
  • 2 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信