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

时间:2017-02-24 12:15:38

标签: sql postgresql ddl alter-table

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

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

我们有什么方法可以将abc类型从character varying(3)更改为boolean并将数据YES更改为trueNO false

请帮助我,否则如果我们不想丢失数据,我该怎么办?

我使用查询

ALTER TABLE xyz ALTER abc TYPE boolean
USING CASE abc WHEN 'YES' THEN TRUE ELSE FALSE END;

但它不起作用,它抛出错误不能自动转换为类型boolean

1 个答案:

答案 0 :(得分:4)

您错过了abcWHEN之间的空格:

ALTER TABLE xyz ALTER abc TYPE boolean
USING CASE abc WHEN 'YES' THEN TRUE ELSE FALSE END;
-- Here ------^

另外,您可能需要确保只将'YES''NO'转换为布尔值:

ALTER TABLE xyz ALTER abc TYPE boolean
USING CASE abc WHEN 'YES' THEN TRUE 
               WHEN 'NO'  THEN FALSE 
      END;