sql - 无法在 postgres 中将列更改为整数或 bool 值

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

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

时,相同的查询有效
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);

它也不适用于 bool 值。

最佳答案

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

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]+$' 测试该列是否仅包含数字。

关于sql - 无法在 postgres 中将列更改为整数或 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467901/

相关文章:

postgresql - Postgres : see query used to create materialized view?

sql - dbplyr、dplyr 和没有 SQL 等效项的函数 [例如 `slice()`]

php - MySQL 查询产品有多种尺寸和价格

mysql - 如何在 mysql 连接中选择可能不存在的行

ruby-on-rails - Ruby/Rails - 反向迁移 - DDL 到 Ruby 代码

ddl - 维护引用完整性

java - 从 JPA 实体逆向工程 DDL

mysql - SQL 触发器创建 - 如何检查 NULL 或空?

sql - 使用递归 sql 计算平均成本(postgres 9.1)

sql - 更新部分重复的行中的表