我正在使用以下查询将列的数据类型从文本更改为整数,但出现错误:
alter table a.attend alter column terminal TYPE INTEGER ;
错误:无法自动将“终端”列强制转换为整数类型
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。
``character varying
id
integers
varchar
integer
ALTER TABLE test ALTER COLUMN id TYPE integer;
但它返回:
错误:``渋d’‘列无法自动转换为整数SQL状态:42804提示:指定USING表达式以执行转换
这意味着我们可以简单地更改数据类型,因为列中已经有数据。由于数据是character varyingPostgres类型的,尽管我们仅输入了整数,但Postgres不能期望它是整数。因此,现在,正如Postgres建议的那样,我们可以使用USING表达式将数据转换为整数。
character varying
USING
ALTER TABLE test ALTER COLUMN id TYPE integer USING (id::integer);
有用。
所以你应该使用
alter table a.attend alter column terminal TYPE INTEGER USING (terminal::integer) ;