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 加入
还未添加个人简介

促进软件开发及相关领域知识与创新的传播
京公网安备 11010502039052号
    


评论