我正在尝试将列的类型从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
错误没有任何意义。命令中根本没有“字符串”。我做错了什么?
答案 0 :(得分:2)
列audio_session.module_type_cd
或audio_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
答案 1 :(得分:2)
命令中根本没有“字符串”。
但必须在数据中。您要使用的命令会尝试将所有列值转换为整数。检查一下:
select *
from audio_session
where module_type_cd = 'string' or sound_type_cd = 'string';