1.查询JSON数据里的数值
JSON_EXTRACT(字段,'$.名称');
表名:depts
id | name | json_value |
1 | 哈哈哈 | {"age": 10, "arr": [10, 11], "name": "哈哈"} |
2 | Xoxoxo | {"age": 15, "arr": [10, 11, 18], "name": "Xoxoxo"} |
3 | iswer | {"age": 18, "arr": [16, 19], "name": "iswer"} |
例子:SELECT id,`name`,JSON_EXTRACT(json_value,'$.name') as json_value from depts(查询结果有引号)
使用: JSON_UNQUOTE 可以去除引号
SELECT id,`name`,JSON_UNQUOTE(JSON_EXTRACT(json_value,'$.name')) as json_value from depts
id | name | json_value |
1 | 哈哈哈 | "哈哈" |
2 | Xoxoxo | "Xoxoxo" |
3 | iswer | "iswer" |
也可以在where中使用
SELECT id,`name` from depts WHERE JSON_EXTRACT(json_value,'$.age') >= 15
id | name |
2 | Xoxoxo |
3 | iswer |
2.查询数据是否存在(成功返回1 失败返回0)
JSON_CONTAINS 判断是否包含某个json值
where JSON_CONTAINS(JSON_ARRAY(10,11,18),JSON_EXTRACT(json_value,'$.arr')) //查询arr数组中,已有数据等于(10,11,18)的,不能有多余的,可以缺少 (如果查询的是 10,11 只会查出id为1的 因为 id 韦为 2的数据中 有多余的18)
id | name | json_value |
1 | 哈哈哈 | {"age": 10, "arr": [10, 11], "name": "哈哈"} |
2 | Xoxoxo | {"age": 15, "arr": [10, 11, 18], "name": "Xoxoxo"} |
where JSON_CONTAINS(JSON_EXTRACT(json_value,'$.arr'),JSON_ARRAY(10,11)) //查询arr数组中同时包含10和11的数据
id | name | json_value |
1 | 哈哈哈 | {"age": 10, "arr": [10, 11], "name": "哈哈"} |
2 | Xoxoxo | {"age": 15, "arr": [10, 11, 18], "name": "Xoxoxo"} |