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

在PostgreSQL中将列数据类型从文本更改为整数,sql,postgresql,casting,Sql,Postgresql,Casting,我使用以下查询将列的数据类型从文本更改为整数,但出现错误: alter table a.attend alter column terminal TYPE INTEGER ; 错误:“terminal”列无法自动转换为整型 从上表可以看出,我使用了数据类型–字符变化表示id 专栏。但这是一个错误,因为我总是把整数作为id来给出。因此,在这里使用varchar是一种不好的做法。因此,让我们尝试将列类型更改为integer ALTER TABLE test ALTER COLUMN id TYP

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

 alter table a.attend alter column terminal TYPE INTEGER ;
错误:“terminal”列无法自动转换为整型

从上表可以看出,我使用了数据类型–
字符变化
表示
id
专栏。但这是一个错误,因为我总是把
整数
作为
id
来给出。因此,在这里使用
varchar
是一种不好的做法。因此,让我们尝试将列类型更改为
integer

ALTER TABLE test ALTER COLUMN id TYPE integer;
但它的回报是:

错误:“id”列无法自动转换为整型SQL 状态:42804提示:指定一个使用表达式来执行 转化

这意味着我们不能简单地更改数据类型,因为数据已经存在于列中。由于数据类型为
字符变化
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) ;

只有在源类型和目标类型之间没有定义隐式赋值转换时,才需要使用
USING
子句。细节和细节。
alter table a.attend alter column terminal TYPE INTEGER  USING (terminal::integer) ;