MySQL的常用JSON函数

1. JSON_SEARCH(col, type, val)

JSON_SEARCH(col ->> '$[*].key', type, val)

col: JSON格式的字段名

key:要搜索的col字段的key,如果字段没有key可以省略,例如单纯的json字符串['1', '2', '3', '4']

type:可以为'one'或者'all','one'表示搜索到一个即返回,'all'表示搜索完再返回

val:要搜索的字段值,字符串格式,支持模糊搜索

返回值:如果col字段的key中含有val值,则返回第一个出现该值的索引;如果col字段的key中不含有val值,则返回null

注:如果col字段为单值JSON,不需要加[*],只有当其为数组JSON时才需要加

2. JSON_CONTAINS(col, '{key:val}')

col:JSON格式的字段名

key:要搜索的col字段的key,字符串格式

val:要搜索的字段值,字符串格式

返回值:如果col字段的key中含有val值,则返回1;如果col字段的key中不含有val值,则返回0

 

这两个函数都可以检索JSON格式的字段中是否含有指定的值,下面举例说明

 

teams表,有4个字段,其中leaders是JSON格式,表示团队主管

id   name     create_time    leaders
1
小象 2018-10-05 [{"userId": "001", "displayName": "张三"}, {"userId": "005", "displayName": "李四"}, {"userId": "008", "displayName": "刘鹏"}] 2 新人类 2018-05-15 null 3 芒果 2017-08-22 [{"userId": "002", "displayName": "王五"}, {"userId": "005", "displayName": "李四"}] 4 三叶草 2018-01-10 [{"userId": "001", "displayName": "张三"}, {"userId": "014", "displayName": "王大锤"}] 5 火车头 2017-12-12 null

  

 现在要检索张三作为团队主管的团队

SELECT * FROM teams
WHERE JSON_SEARCH(leaders ->> '$[*].displayName', 'one', '%张三%') IS NOT NULL;

SELECT * FROM teams
WHERE JSON_CONTAINS(leaders, '{"displayName":"张三"}') = 1;

 

以上两种方法都查出结果

id   name     create_time    leaders
1
小象 2018-10-05 [{"userId": "001", "displayName": "张三"}, {"userId": "005", "displayName": "李四"}, {"userId": "008", "displayName": "刘鹏"}] 4 三叶草 2018-01-10 [{"userId": "001", "displayName": "张三"}, {"userId": "014", "displayName": "王大锤"}]

 

posted @ 2019-01-30 11:10  西班牙乞丐  阅读(6216)  评论(0编辑  收藏  举报