0
点赞
收藏
分享

微信扫一扫

MySQL的json数据类型常用操作

Gascognya 2021-10-09 阅读 79
日记本

数据库表和数据

CREATE TABLE `t_json` (
  `id` int NOT NULL AUTO_INCREMENT,
  `json_val` json DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9;

INSERT INTO t_json (json_val) VALUES
('[3,4,5,6,7]')
,('[5,6,7,8,9]')
,('["3","4","5","6","7"]')
,('["5","6","7","8","9"]');

JSON_SEARCH

SELECT 
    *,
    JSON_SEARCH(json_val, 'one', '6') AS search_int,
    JSON_SEARCH(json_val, 'one', '"6"') AS search_str
FROM t_json;


总结:
JSON_SEARCH(json_val, 'one', '6') 查找json数组中,字符串型"6"的下标索引;
JSON_SEARCH(json_val, 'one', '"6"') 无用;
JSON_SEARCH只能检索字符型下标。

JSON_CONTAINS

SELECT 
    *,
    JSON_CONTAINS(json_val, '6') AS contains_int,
    JSON_CONTAINS(json_val, '"6"') AS contains_str
FROM t_json;


总结:
JSON_CONTAINS(json_val, '6') 判断json数组中,是否包含数值型6,返回1为包含,0为不包含;
JSON_CONTAINS(json_val, 'one', '"6"') 判断json数组中,是否包含字符串型"6",返回1为包含,0为不包含。

JSON_UNQUOTE

SELECT JSON_UNQUOTE("$[3]")


总结:
JSON_UNQUOTE("$[3]") 去除""

JSON_ARRAY_INSERT

需求:若json数组中不包含字符串型"5",则在数组头部插入"5"
1.sql语句写法

UPDATE t_json 
    SET json_val=JSON_ARRAY_INSERT(json_val, '$[0]', '5')
    WHERE JSON_CONTAINS(json_val,'"5"') = 0;

2.mapper.xml写法

UPDATE t_json 
    SET json_val=JSON_ARRAY_INSERT(json_val, '$[0]', #{technicianId,jdbcType=VARCHAR})
    WHERE JSON_CONTAINS(json_val,CONCAT('"',#{technicianId,jdbcType=VARCHAR},'"')) = 0;

执行前



执行后


JSON_REMOVE

需求:若json数组中包含字符串型"5",则删除数组中的"5"
1.sql语句写法

UPDATE t_json 
    SET json_val=JSON_REMOVE(json_val,JSON_UNQUOTE(JSON_SEARCH(json_val, 'one', '5'))) 
    WHERE JSON_CONTAINS(json_val,'"5"') = 1;

2.mapper.xml写法

UPDATE t_json 
    SET json_val=JSON_REMOVE(json_val,JSON_UNQUOTE(JSON_SEARCH(json_val, 'one', #{technicianId,jdbcType=VARCHAR}))) 
    WHERE JSON_CONTAINS(json_val,CONCAT('"',#{technicianId,jdbcType=VARCHAR},'"')) = 1;

执行前



执行后


举报

相关推荐

0 条评论