在postgres中无法将列更改为整数或布尔值

时间:2016-04-07 06:05:06

标签: sql postgresql ddl alter

我尝试使用以下查询postgres将列更改为整数类型。

alter table pm_user alter column testing2 type integer using testing2::integer;

pm_user - 表名
testing2 - 列名

上面的列可以是任何类型的数据类型,例如:boolean,text,varchar(256)。

它给出错误'错误:整数的输入语法无效:“NULL”'我根据此网站上提到的先前查询尝试了以下解决方案,但它对我不起作用。

alter table pm_user alter column testing2 type integer using (testing2::integer);                                   
alter table pm_user alter column testing2 type integer;            
alter table pm_user alter column testing2 type numeric using (testing2::numeric);         
alter table pm_user alter column testing2 type numeric (10,2);

实际问题是什么?在哪里 点输入为空?哪一个被视为null?我能提供什么解决方案。当我尝试更改为

时,相同的查询有效
alter table pm_user alter column testing2 type text using testing2::text;  
alter table pm_user alter column testing2 type varchar(256)using testing2::varchar(256);

它也不适用于布尔值。

1 个答案:

答案 0 :(得分:2)

错误消息表明您的列包含字符串文字'NULL'而不是" real"空值。像这样:

create table pm_user (testing2 varchar);
insert into pm_user (testing2) values ('NULL');

(请注意'NULL' - 与NULL

不同

因此将字符串转换为数字的表达式必须处理这个问题。

以下内容将varchar列转换为整数。该列中任何不是正确整数的值都将更改为null:

alter table pm_user alter column testing2 type integer 
   using case when testing2 ~ '^[-+0-9]+$' then testing2::integer else null end; 

~是Postgres'运算符用于正则表达式。 testing2 ~ '^[0-9]+$'测试列是否仅包含数字。