大佬们遇到过这个问题吗?mysql 查询中如何使用正则查询匹配特定字符?求指导!

表中一个字段存储了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"';
守着星空守着你
浏览 302回答 2
2回答

MMMHUHU

如果多个字段的话,用正则很麻烦。要写很长SELECT*FROMmytableWHEREmycolumnREGEXP"{[^{}]*(\"task_result\":\"AGREE\"[^{}]*\"userid\":\"V00_1400815737560\"|\"userid\":\"V00_1400815737560\"[^{}]*\"task_result\":\"AGREE\")[^{}]*}";

沧海一幻觉

如果没有嵌套json且每一项的值都可以保证不含字符}的话可以把正则里的.+替换成[^}]+。否则会非常麻烦此外还需要保证json序列化的时候task_status始终在userid前面
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript