我使用以下查询将列的数据类型从文本更改为整数但得到错误:
alter table a.attend alter column terminal TYPE INTEGER ;
错误:列"终端"不能自动转换为整数
答案 0 :(得分:24)
create table test(id varchar );
insert into test values('1');
insert into test values('11');
insert into test values('12');
select * from test
--Result--
id
character varying
--------------------------
1
11
12
您可以从上表中看到我使用了数据类型 - character varying
id
柱。但这是一个错误,因为我总是将integers
作为id
。所以在这里使用varchar
是一种不好的做法。因此,我们尝试将列类型更改为integer
。
ALTER TABLE test ALTER COLUMN id TYPE integer;
但它返回:
错误:列“id”无法自动转换为类型整数SQL state:42804提示:指定一个USING表达式来执行 转化
这意味着我们不能简单地更改数据类型,因为列中已存在数据。由于数据类型为character varying
,Postgres不能将其视为整数,尽管我们只输入了整数。所以现在,正如Postgres建议我们可以使用USING
表达式将数据转换为整数。
ALTER TABLE test ALTER COLUMN id TYPE integer USING (id::integer);
有效。
所以你应该使用
alter table a.attend alter column terminal TYPE INTEGER USING (terminal::integer) ;