Golang 字符串分组
有次更新表没写条件,导致全部记录都被更改了,从备份表中导出更新语句如下:
复制代码
直接更新这么多条记录服务器肯定扛不住,于是分成每次更新 10 条,这里就需要对字符串进行分组。
我的想法是先对字符串用 lits := strings.Split(query, ";")
变成切片,然后新建一个 [][]string
类型的切片用于添加
lits
中的元素,每次添加 10 条:
复制代码
有次更新表没写条件,导致全部记录都被更改了,从备份表中导出更新语句如下:
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 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论