背景:
有这样一个数据表user,其包含一个字段extra,用于保存用户额外的信息(比如邮箱、电话、描述等)
这些信息是以json格式进行保存,比如{“email”:”wq@163.com”,”phone”:”1234567”,”descrption”:”user info”}
现在需要按照email进行模糊查询,如何写sql?
解决方法:
方法一、使用数据库自带的json_extract函数
SELECT * from USER u where json_extract(u.extra,”$.email”) like ‘%?%’
其中?处就是需要模糊匹配的内容。
json_extract(u.extra,”$.email”) 就可以得到extra字段中的email值
注意:数据库使用mysql 5.7.18 实际情况看是否支持json_extract函数
方法二、使用正则表达式
SELECT * from USER u where u.extra regexp ‘“email”: “[^”]?[^”]’
因为我们要匹配“email”:”wq@163.com” 这块内容,不能匹配后面的部分。
[^”]*表示0个或多个字符,意思就是匹配的内容前后可以包含任意个字符,只要没有“就OK。