将列类型字符变化(3)更改为布尔值而不会丢失数据

Saa*_*wal 4 sql postgresql ddl alter-table

我正在使用 postgres。我创建了一个表xyz,其中包含一个abc类型为 的列character varying(3)。我保存'YES''NO'abc列。

我在表中存储了一段时间的数据。但是现在要求变了。我们需要将abc列类型从更改character varying(3)boolean

有什么方法可以将abc类型从character varying(3)toboolean更改为和将数据更改YEStrueNOtofalse吗?

请帮助我,否则如果我们不想丢失数据,我该如何继续。

我使用查询

ALTER TABLE xyz ALTER abc TYPE boolean
USING CASE abc WHEN 'YES' THEN TRUE ELSE FALSE END;
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它抛出错误无法自动转换为布尔类型

Mur*_*nik 5

您在abc和之间缺少空格WHEN

ALTER TABLE xyz ALTER abc TYPE boolean
USING CASE abc WHEN 'YES' THEN TRUE ELSE FALSE END;
-- Here ------^
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望确保只有'YES''NO'被转换为布尔值:

ALTER TABLE xyz ALTER abc TYPE boolean
USING CASE abc WHEN 'YES' THEN TRUE 
               WHEN 'NO'  THEN FALSE 
      END;
Run Code Online (Sandbox Code Playgroud)