我有一个小表和某个字段包含类型“字符变化”。我试图将其更改为“整数”,但它给出了一个错误,casting是不可能的。
是否有办法解决这个问题,或者我应该创建另一个表,并使用查询将记录带入其中。
该字段只包含整数值。
我有一个小表和某个字段包含类型“字符变化”。我试图将其更改为“整数”,但它给出了一个错误,casting是不可能的。
是否有办法解决这个问题,或者我应该创建另一个表,并使用查询将记录带入其中。
该字段只包含整数值。
当前回答
如果您在开发环境(或生产环境)中工作。它可能是备份您的数据),然后首先从DB字段清除数据或设置值为0。
UPDATE table_mame SET field_name= 0;
然后运行下面的查询,成功运行查询后,运行模式迁移,然后运行迁移脚本。
ALTER TABLE table_mame ALTER COLUMN field_name TYPE numeric(10,0) USING field_name::numeric;
我想这对你有帮助。
其他回答
字符变化中的空字符串或空值
如果你有一个包含空字符串或null的列,你可能会遇到错误消息:
整数类型的输入语法无效:""
解决方案
使用coalesce和nullif来获取空字符串,使用nulls来获取零值。
ALTER TABLE peopleGroup ALTER numberPeople TYPE INT USING (cast ( coalesce( nullif( trim(numberPeople), '' ), '0' ) as integer ))
你可以这样做:
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
或者试试这个:
change_column :table_name, :column_name, :integer, using: 'column_name::integer'
如果您对这个主题感兴趣,请阅读这篇文章:https://kolosek.com/rails-change-database-column
我也有同样的问题。 然后我意识到我有一个默认字符串值的列,我试图改变。 删除默认值使错误消失:)
我也有同样的问题。我开始重置列的默认值。
change_column :users, :column_name, :boolean, default: nil
change_column :users, :column_name, :integer, using: 'column_name::integer', default: 0, null: false
如果您在开发环境(或生产环境)中工作。它可能是备份您的数据),然后首先从DB字段清除数据或设置值为0。
UPDATE table_mame SET field_name= 0;
然后运行下面的查询,成功运行查询后,运行模式迁移,然后运行迁移脚本。
ALTER TABLE table_mame ALTER COLUMN field_name TYPE numeric(10,0) USING field_name::numeric;
我想这对你有帮助。