写点什么

Golang 字符串分组

用户头像
一代咩神
关注
发布于: 2021 年 04 月 08 日

有次更新表没写条件,导致全部记录都被更改了,从备份表中导出更新语句如下:


UPDATE tblCW_HospPay SET Pay_State = 0, Pay_Desc = N'', Pay_AccID = 0 WHERE ID = 20432;UPDATE tblCW_HospPay SET Pay_State = 0, Pay_Desc = N'', Pay_AccID = 0 WHERE ID = 20433;UPDATE tblCW_HospPay SET Pay_State = 0, Pay_Desc = N'', Pay_AccID = 0 WHERE ID = 20434;UPDATE tblCW_HospPay SET Pay_State = 0, Pay_Desc = N'', Pay_AccID = 0 WHERE ID = 20435;... (几万条记录,每条记录并不都是一样的,也不都已换行结束,但是都以分号(;)结束。)
复制代码

直接更新这么多条记录服务器肯定扛不住,于是分成每次更新 10 条,这里就需要对字符串进行分组。

我的想法是先对字符串用 lits := strings.Split(query, ";") 变成切片,然后新建一个 [][]string 类型的切片用于添加 lits 中的元素,每次添加 10 条:


lits := strings.Split(query, ";")sqls := make([][]string, 0)
for i, _ := range lits { if i % 10 != 0 { continue } if i + 10 >= len(lits) { sqls = append(sqls, lits[i:]) }else { sqls = append(sqls, lits[i:i+10]) }}
for _, strArr := range sqls { s := strings.Join(strArr, ";") if err = db.DB.Exec(s).Error; err != nil { fmt.Println("--------------------") fmt.Println("update err:", err) fmt.Println("sql:", s) fmt.Println("--------------------") time.Sleep(time.Hour * 1) }}
fmt.Println("执行完成!")time.Sleep(time.Hour * 1)
复制代码


用户头像

一代咩神

关注

还未添加个人签名 2019.04.18 加入

还未添加个人简介

评论

发布
暂无评论
Golang 字符串分组