我正在编写迁移以将列类型从字符串更改为整数。
def change
change_column :emails, :object_id, :integer
end
此迁移失败,因为此列已包含字符串值。在执行此迁移之前,我尝试删除此列中的所有字母,以便我只能获取整数值。现有值类似于
"AB12345"
"A12345X"
"789X26A"
我应该在迁移之前执行哪些脚本来删除所有字母并仅实现这样的整数值?
"12345"
"12345"
"78926"
由于
答案 0 :(得分:2)
如果您有超过10,000条记录,请在数据库中进行转换。对于postgres来说,这就像是:
select regexp_replace('1231ASDF12', '[^0-9]', '', 'g')
您可以使用execute
在迁移中运行原始sql:
update table set col = regexp_replace(col, '[^0-9]', '', 'g')
请注意,如果您打算将object_id
作为外键,则需要更新所引用的任何表格,并确保您不会无意中破坏任何内容(例如,如果数据集中有AB123和BC123)。
答案 1 :(得分:0)
我认为你可以使用修剪功能,但是下面的代码就可以了。
result = Replace("Some sentence containing Avenue in it.", "Avenue", "Ave")
来自Access VBA | How to replace parts of a string with another string
的示例您可以将“A”更改为“” “B”变为“”等。
你最终会使用这样的代码
Do While ActiveCell.Value <>""
ActiveCell.Value = Replace(ActiveCell.Value, "A", "")
ActiveCell.Value = Replace(ActiveCell.Value, "B", "")
ActiveCell.Value = Replace(ActiveCell.Value, "C", "")
ect...
ActiveCell.Offset (-1,0).Select
Loop