有一个很好的问题here我想详细说明。我正在尝试将数据库中的列转换为字符串形式。
我认为转换非常直接。目前我的字符串是
["10", "12", "125", "135", "140", ...]
我的迁移文件包括:
def change
change_column :table_name, :product_code, :integer
end
Rails尝试这个,但是Postgresql发回错误。
PG ::错误:错误:列" product_code"不能自动转换为类型整数
提示:指定USING表达式以执行转换。
我不确定我是如何使用这个'使用'在我的rails迁移中表达。
所以我认为转换非常简单。我应该使用什么作为USING表达式?
答案 0 :(得分:29)
change_column :table_name, :product_code,
'integer USING CAST(product_code AS integer)'
答案 1 :(得分:13)
调整后的代码也支持转换空白字符串:
change_column :table_name, :product_code,
"integer USING NULLIF(product_code, '')::int"
空字符串变为NULL
,在类型转换时变为0
,这可能是您在这种情况下可以做的最好。
答案 2 :(得分:0)
当您编写Rails迁移以将字符串列转换为整数时,您通常会这样写:
change_column :table_name, :column_name, :integer
你可能会得到这个:
PG::DatatypeMismatch: ERROR: column "column_name" cannot be cast automatically to type integer
HINT: Specify a USING expression to perform the conversion.
"提示"基本上告诉你,你需要确认你是否希望这种情况发生,以及如何转换数据。只需在迁移中说明这一点:
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'