在PostgreSQL中将列数据类型从Text更改为Integer

时间:2014-10-18 11:01:09

标签: sql postgresql casting

我使用以下查询将列的数据类型从文本更改为整数但得到错误:

 alter table a.attend alter column terminal TYPE INTEGER ;
  

错误:列"终端"不能自动转换为整数

1 个答案:

答案 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) ;