mysql中json类型字段模糊查询 | 我的日常分享

mysql中json类型字段模糊查询

mysql中json类型字段模糊查询

一、json对象结构的字段内容

  1. 使用字段->'$.json属性'
1
2
select * from (select '{"addr": "湖北省黄石市xxxx", "name": "张三", "birth": "1800年10月12日", "gender": "男", "idcard": "420222180010124871", "nation": "汉"}' as data) t
where data->'$.name' LIKE '%张%';
  1. 使用json_extract函数查询,json_extract(字段, "$.json属性")
1
2
select * from (select '{"addr": "湖北省黄石市xxxx", "name": "张三", "birth": "1800年10月12日", "gender": "男", "idcard": "420222180010124871", "nation": "汉"}' as data) t
where json_extract(data,'$.name') LIKE '%张%';

二、json数组结构的字段内容

  1. 使用 字段->'$[数组索引].json属性'
1
2
3
4
select * from (select '[{"real-name": "张三","phone": "15611112222"},{"real-name": "李四","phone": "17833334444"}]' as data) t
where data->'$[*]."real-name"' LIKE '%张%'; -- 查询数组索引任意的对象
-- where data->'$[0]."real-name"' LIKE '%张%'; -- 查询数组索引为0的对象
-- where data->'$[1]."real-name"' LIKE '%张%'; -- 查询数组索引为1的对象
  1. 使用JSON_CONTAINS(字段, JSON_OBJECT('json属性', '内容'))
1
2
select * from (select '[{"real-name": "张三","phone": "15611112222"},{"real-name": "李四","phone": "17833334444"}]' as data) t
where JSON_CONTAINS(data,JSON_OBJECT('real-name', "张三"))

对于对象结构的json字段类型,如果json的key中包含特殊字符,如:-、#、_等,可以使用加双引号的方式来解决

参考:MySQL 5.7新增对JSON支持