在PostgreSQL中将列的数据类型更改为整数(带n/a的列)

在PostgreSQL中将列的数据类型更改为整数(带n/a的列),postgresql,Postgresql,我在PostgreSQL 11.0中有一个列(phase_mapped),包含整数和n/a值。nchar(3)中列的当前数据类型。我想将此列的数据类型转换为整数,但n/a抛出错误。如何设置此类列的int数据类型 phase phase_mapped Phase 1 1 Phase 2 2 n/a n/a 我试着回答以下问题 ALTER TABLE table ALTER COLUMN phase_mapped TYPE INT USING phase_map

我在PostgreSQL 11.0中有一个列(phase_mapped),包含整数和n/a值。nchar(3)中列的当前数据类型。我想将此列的数据类型转换为整数,但n/a抛出错误。如何设置此类列的int数据类型

phase   phase_mapped
Phase 1   1  
Phase 2   2  
n/a       n/a
我试着回答以下问题

ALTER TABLE table
  ALTER COLUMN phase_mapped TYPE INT USING phase_mapped::integer;

非常感谢您提供的任何帮助

您可以在
中使用处理
n/a
的部分提供表达式。您可能还需要处理空字符串

ALTER TABLE table
  ALTER COLUMN phase_mapped TYPE INT 
  USING nullif(trim(nullif(phase_mapped,'n/a')),'')::integer;
或者只需删除所有非数字字符:

ALTER TABLE table
  ALTER COLUMN phase_mapped TYPE INT 
  USING nullif(regexp_replace(phase_mapped,'[^0-9]', '', 'g'),'')::integer;

您可以使用处理
n/a
部分在
中提供表达式。您可能还需要处理空字符串

ALTER TABLE table
  ALTER COLUMN phase_mapped TYPE INT 
  USING nullif(trim(nullif(phase_mapped,'n/a')),'')::integer;
或者只需删除所有非数字字符:

ALTER TABLE table
  ALTER COLUMN phase_mapped TYPE INT 
  USING nullif(regexp_replace(phase_mapped,'[^0-9]', '', 'g'),'')::integer;