mysql之json字段值查询-JSON_CONTAINS、JSON_EXTRACT
一、JSON_CONTAINS
先来看看我百度到的定义和实例
============================================================================
解读:参数主要有三个值,分别是json对象、值、json的具体key值(可缺省)
人话:前面包含后面为真则返回1(前面包含后面!!前面包含后面!!前面包含后面!!)
写法:
1.select * from A where JSON_CONTAINS(json对象,值,json的某个key)
- 完整简单写法(key的值也是一个json):select * from A where JSON_CONTAINS(@json,'1','$.keyname') //筛选出json对象keyname这个key值包含1的记录
- 不带path的写法(第一个参数已经是想比对的json)select JSON_CONTAINS(A.xx,'1') //根据A表xx字段(json值)是否包含1返回1或0
- 结合JSON_ARRAY的写法,如下,因为要前面包含后面,所以子集至少是[2,6]
- 结合JSON_ARRAY写法之筛选符合任意个数元素的记录,此时把JSON_ARRAY放前面,匹配字段放后面(满足需求:scene_id包含1或6就返回)
二、JSON_EXTRACT
==============================================================================
解读:提取json的key的值,如有多个则以数组返回
用法:可以用来判断或提取值,后面可以加like或=等匹配词,跟在select后面则返回符合的json字段值,跟在where后面则返回作为条件判断
ps:
以上两种写法需要数据库有执行权限,可能会报错,eg:
需要给数据库用户加权限,eg
GRANT ALL PRIVILEGES ON *.* TO ‘用户名’@’%’ ;
FLUSH PRIVILEGES;
三、符号写法
写法:
字段名->"$.keyname.keyname......"
举例说明:
content字段是一个json值,层级结构如下,想获取橙色字段值用于判断,写法如下
层层递进到想要的字段,注意中间如果是数组还需定位到数组的第几个元素