将varchar字段的类型更改为整数:“无法自动转换为整数类型”

我有一个小表,某个字段包含类型“character variabling”。我试图将其更改为“整数”,但它给出了一个错误,即无法进行强制转换

有没有办法解决这个问题,或者我应该创建另一个表,并使用查询将记录带入其中

该字段仅包含整数值

没有从textvarcharinteger的隐式(自动)强制转换(即,您不能将varchar传递给需要integer的函数,也不能将varchar字段分配给integer一个),因此必须使用ALTER TABLE指定显式强制转换。。。更改列。。。类型使用:

使用(col\u name::integer)更改表格ALTER colu name TYPE integer列;

请注意,文本字段中可能有空格;在这种情况下,请使用:

使用(trim(col\u name)::integer)更改表格更改列col\u name类型整数;

在转换前去除空白

如果该命令是在psql中运行的,那么从错误消息中可以明显看出这一点,但是PgAdmin III可能没有显示完整的错误。如果我在PostgreSQL 9.2上的psql中测试它,会发生以下情况:

=>创建表测试(x varchar);
创建表
=>插入测试(x)值('14'),('42');
插入0 2
=>ALTER TABLE test ALTER COLUMN x TYPE integer;
错误:“x”列无法自动转换为整型
提示:指定一个使用表达式来执行转换。
=>ALTER TABLE test ALTER列x TYPE integer使用(trim(x)::integer);
更改表格

感谢@muistooshort使用链接添加

另见这一相关问题;这是关于Rails迁移的,但根本原因是相同的,答案也适用

如果错误仍然发生,那么它可能与列值无关,但是此列或列默认值上的索引可能会导致typecast失败。需要在ALTER列之前删除索引,然后在ALTER列之后重新创建索引。应适当更改默认值

发表评论