mysql 循环更新数据 存储过程记录,包含填充函数,日期增加函数,字符串拼装函数,类型转换函数,json字段操作函数

记录一下方便后续使用

用到的函数

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值