Mysql旧数据处理常用sql模板·持续更新...

本文介绍了如何通过SQL操作在旧数据中为特定字段添加新值,如clo字段的随机数初始化并保持唯一,以及为日期字段invalid_time设置为关联字段值加一段时间。同时,还提及了如何生成唯一代码字段,确保数据一致性。
摘要由CSDN通过智能技术生成

给旧数据新增字段初始化唯一值

通过sql给clo为空的数据,clo字段初始化为一个随机数,且要求唯一

#下述语句将会将clo字段为空的记录的clo字段值初始化为一个随机数。随机数以"APC"开头,后面跟随5位随机数字。(LPAD函数用于补齐随机数字的位数,确保都是5位数)
UPDATE your_table
SET clo= CONCAT(‘APC’, LPAD(FLOOR(RAND() * 100000), 5, ‘0’))
WHERE cloI NULL

将旧数据新增日期字段,初始化为某字段的值加一段时间(DATE_ADD函数)

举例:通过sql 将新增字段invalid_time(datetime)初始化为创建时间(datetime)+配置表的有效月份数(int)
思路:关联查出数据,再通过DATE_ADD()函数将计算后的时间赋值给invalid_time

UPDATE participation p
#这里participation_code代表的是两表的关联字段,若是id关联的就换id吧
JOIN participation_config pc ON pc.participation_code = p.participation_code
SET p.invalid_time = DATE_ADD(p.create_time, INTERVAL pc.effective_time MONTH);
where p.create_time is not null
and xxx(先小范围试一下)

检查脚本:

#初始化报名过期时间 检查脚本,查询为空即为全部成功,失败返回失败id
SELECT
    GROUP_CONCAT(ep.id) AS failed_ids
FROM participation p
         JOIN participation_config pc ON pc.participation_code = p.participation_code
WHERE p.invalid_time IS NULL
  AND pc.effective_time IS NOT NULL;

旧数据新增两code字段,

要求:

  1. code值为 PC+年月日+创建序号(按创建顺序)
  2. code值唯一,包括与其他行数据的 code1,code2字段都要唯一
  3. 字段二比字段一大1

思路:

  1. 给同天的数据加行号
  2. 先给code1字段更新 为固定前缀+2倍行号
  3. 再给code2字段更新 为固定前缀+(2倍行号+1)
#先给code1字段更新 为固定前缀+2倍行号
update your_table ec
         join (
    SELECT id,
           create_time,
           (ROW_NUMBER() OVER (PARTITION BY DATE(create_time) ORDER BY create_time) - 1) * 2 AS create_index
    FROM your_table
) as tmp on tmp.id = ec.id
set ec.code1=CONCAT('PC', DATE_FORMAT(ec.create_time, '%y%m%d'), tmp.create_index)
#先小规模测试
where ec.id=1;

UPDATE your_table ec
    JOIN (
        SELECT id,
               create_time,
               CAST((ROW_NUMBER() OVER (PARTITION BY DATE(create_time) ORDER BY create_time) - 1) * 2 AS SIGNED) AS create_index
        FROM your_table
    ) AS tmp ON tmp.id = ec.id
SET ec.code2 = CONCAT('LN', DATE_FORMAT(ec.create_time, '%y%m%d'), tmp.create_index + 1)
#先小规模测试
where ec.id=1;
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值