小编典典

在PostgreSQL中将列数据类型从“文本”更改为“整数”

sql

我正在使用以下查询将列的数据类型从文本更改为整数,但出现错误:

 alter table a.attend alter column terminal TYPE INTEGER ;

错误:无法自动将“终端”列强制转换为整数类型


阅读 284

收藏
2021-04-15

共1个答案

小编典典

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 列’‘ 。但这是错误的,因为我总是给予integersas
id。因此,使用varchar此处是一个不好的做法。因此,让我们尝试将列类型更改为integer

ALTER TABLE test ALTER COLUMN id TYPE integer;

但它返回:

错误:``渋d’‘列无法自动转换为整数SQL状态:42804提示:指定USING表达式以执行转换

这意味着我们可以简单地更改数据类型,因为列中已经有数据。由于数据是character varyingPostgres类型的,尽管我们仅输入了整数,但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) ;
2021-04-15