无法在postgres中将列更改为integer或boolean



我试图使用下面的查询postgres将一列更改为整数类型。

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

pm_user-表名
testing2-列名

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

它给出的错误为"error:integer的无效输入语法:"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);

实际问题是什么?它在哪里点输入为空?哪一个被视为空?我能提供什么解决方案。当我尝试更改为时,同样的查询也有效

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);

它也不适用于布尔值。

错误消息指示您的列包含字符串文字'NULL',而不是"real"null值。类似这样的东西:

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

(注意'NULL'-与NULL不同)

因此,将字符串转换为数字的表达式必须注意这一点。

下面将把varchar列转换为integer。该列中任何不是正确整数的值都将更改为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]+$'测试列是否只包含数字。

相关内容

最新更新