如何在psql中对一个范围内的列执行批量更新

How to perform batch update of a column within a range in psql

这是我的 table 结构:

Table name:Items
--------------------------------
 id   | category_id |  code   |
--------------------------------
 1   | 1            |  15156  |
 2   | 1            |  15157  |
 2   | 1            |  15158  |
 2   | 1            |  15159  |
 2   | 1            |  15160  |
 2   | 1            |  15161  |

这里的code字段是唯一的,类型是string。我需要将代码字段值增加 +1(代码字段是字符串)。

你可以试试

Item.update_all(code: "#{code.to_i + 1}")

如果你想阅读update_all

update_all 将不起作用,因为记录属性不可用。

更好的可能是...

minimum = "15157"
maximum = "15160"

Item.where("code >= ? AND code <= ?", minimum, maximum).each{|i| i.update_attribute(:code, "#{i.code.to_i + 1}") }

(编辑以反映传递给 update_attribute 的两个参数)

已编辑以反映@rustamagasanov 将代码值限制在给定范围内的建议...