记录一下方便后续使用
用到的函数
JSON_SET:设置json类型数据
json_value:{
"activeEnable": true,
"activeDate": "2021-07-01",
"activeDepartment": {
"key": "1",
"value": "1"
}
}
json字段的简单查询:两个尖括号查出结果为字符类型,一个尖括号查出结果为json类型
SELECT
task_value->>'$.activeEnable' 是否激活,
task_value->>'$.activeDate' 激活时间,
task_value ->'$.activeDepartment.value' 激活部门value
from
w_test
注意:如果json_value中不存在activeDepartment属性,但是想要进行jsonset操作activeDepartment.value需要使用json_object函数,可参考下下面的循环更新存储过程
json_set第一个参数为json数据,第二个参数为jsonPath,第三个参数为第二个参数对应的值;可以设置多个之后都按照path,value的顺序排列
JSON_OBJECT:转换为jsonObject对象
ADDDATE:日期加减
-- ADDDATE(date,INTERVAL expr unit)
-- 第一个参数为时间,后边是单位和要追加的值,下面是最佳31天
SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);
输出: '2008-02-02'
-- 默认追加单位为天
SELECT ADDDATE('2008-01-02', 31);
输出: '2008-02-02'
CAST:类型转换
CONCAT:字符串拼接
LPAD:长度不够时在左侧填充
-- 第一个参数表示被填充的目标;第二个参数为长度;第三个参数为使用何字符进行填充
select LPAD(2, 5, 0)
-- 00002
循环更新sql
w_test表
json_value字段是一个json类型的字符串;eg:
json_value:{
"activeEnable": true,
"activeDate": "2021-07-01",
"activeDepartment": {
"key": "1",
"value": "1"
}
}
title作为唯一标识,eg:title:"00001-202107-template-2"
-- 创建存储过程update24Day()
CREATE PROCEDURE update24Day()
BEGIN
-- 定义int变量v1=1
DECLARE v1 INT DEFAULT 1;
-- 循环24次
WHILE v1 < 25
DO
UPDATE
w_test
SET json_value = JSON_SET(json_value,
'$.activeEnable', false,
'$.activeDate', ADDDATE('2021-07-01', v1),
'$.activeDepartment',
JSON_OBJECT('key', CAST(v1 as char), 'value', CAST(v1 as char))
)
WHERE title = CONCAT(LPAD(2+v1, 5, 0),'-202107-template-2');
SET v1 = v1 + 1;
END WHILE;
END