【问题标题】:Alter column type character varying(3) to boolean without losing data在不丢失数据的情况下将列类型字符可变(3)更改为布尔值
【发布时间】:2017-07-15 06:31:59
【问题描述】:

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

我在表中存储了一段时间的数据。但现在要求发生了变化。我们需要将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;

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

【问题讨论】:

    标签: sql postgresql ddl alter-table


    【解决方案1】:

    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;
    

    【讨论】:

    • 或更短:... using abc = 'YES'
    • @a_horse_with_no_name 这绝对是第一个选项的简洁简写。不过,它并没有增加仅处理 'YES''NO' 的安全性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2012-03-20
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多