为什么我不能在Postgres中修改列类型

时间:2018-06-06 22:46:53

标签: sql postgresql

我正在尝试将列的类型从varchar更改为整数。当我运行以下命令时

alter table audio_session
alter column module_type_cd type INT USING module_type_cd::integer,
alter column sound_type_cd type INT USING sound_type_cd::integer

我收到了错误:

ERROR:  invalid input syntax for integer: "string"
SQL state: 22P02

错误没有任何意义。命令中根本没有“字符串”。我做错了什么?

2 个答案:

答案 0 :(得分:2)

audio_session.module_type_cdaudio_session.sound_type_cd在每行的所有值中至少有一个 非数字 值。因此,它不可能转换为完全 数字 数据类型。

举个例子:

create table Table1( col1 varchar(10), col2 varchar(10) );
insert into Table1 values('1','1');
insert into Table1 values('2','2');
insert into Table1 values('3','C3');

select CAST(coalesce(col1, '0') AS integer) as converted from Table1; -- this works
select CAST(coalesce(col2, '0') AS integer) as converted from Table1; -- but, this doesn't

SQL Fiddle Demo

答案 1 :(得分:2)

  

命令中根本没有“字符串”。

但必须在数据中。您要使用的命令会尝试将所有列值转换为整数。检查一下:

select *
from audio_session
where module_type_cd = 'string' or sound_type_cd = 'string';