mysql 查询中如何使用正则查询匹配特定字符?

发布于 2022-09-11 22:08:04 字数 949 浏览 23 评论 0

表中一个字段存储了json格式的数据,如 tasks 字段,每个人的任务是一个数组,也就是转换成 json 后的 {}:

[{"create_time":"2019-08-27 16:24:51","finish_time":"2019-08-29 12:51:47","task_result":"AGREE","task_status":"COMPLETED","taskid":"62047012545","userid":"0637661208752994"},{"create_time":"2019-08-27 16: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 * from t_xx where tasks regexp '"task_status":"RUNNING".+"userid":"%%s"';

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长梦不多时 2022-09-18 22:08:04

如果多个字段的话,用正则很麻烦。要写很长

SELECT * FROM mytable WHERE mycolumn REGEXP "{[^{}]*(\"task_result\":\"AGREE\"[^{}]*\"userid\":\"V00_1400815737560\"|\"userid\":\"V00_1400815737560\"[^{}]*\"task_result\":\"AGREE\")[^{}]*}";
抱猫软卧 2022-09-18 22:08:04

如果没有嵌套json且每一项的值都可以保证不含字符}的话可以把正则里的.+替换成[^}]+。否则会非常麻烦

此外还需要保证json序列化的时候task_status始终在userid前面

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文