小编典典

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

all

我有一张小桌子,某个字段包含“ 字符变化 ”类型。我正在尝试将其更改为“ 整数 ”,但它给出了一个错误,即无法进行转换。

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

该字段仅包含整数值。


阅读 111

收藏
2022-07-12

共1个答案

小编典典

没有从textvarchar到的隐式(自动)强制转换integer(即,您不能将 a
传递varchar给期望的函数integer或将varchar字段分配给一个),因此您必须使用ALTER TABLE … ALTER
COLUMN … TYPE
integer指定显式强制转换。 ..
使用

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);

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

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);

在转换之前去除空白。

如果命令在 中运行,这应该从错误消息中显而易见psql,但 PgAdmin-III 可能没有向您显示完整的错误。如果我psql
PostgreSQL 9.2 上测试它会发生以下情况:

=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'), (' 42  ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR:  column "x" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion. 
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE

感谢@muistooshort 添加USING链接。

如果错误仍然发生,那么它可能与列值无关,但此列或列默认值的索引可能无法进行类型转换。需要在 ALTER COLUMN
之前删除索引并在之后重新创建索引。应适当更改默认值。

2022-07-12