【问题标题】:Postgres - UPDATE with CASE won't work on enum columnPostgres - 使用 CASE 更新不适用于枚举列
【发布时间】:2021-02-25 21:16:46
【问题描述】:

我有一个fruits 表:

--------------------------------
id | event_date   | fruit_type |
--------------------------------
1  | '2017-01-01' | apple      |
2  | '2018-01-01' | orange     |
3  | '2019-01-01' | pear       |

fruit_type 列的类型为 enum,可以采用以下选项:

  • 苹果
  • 橙色

尝试使用CASE 更新fruit_type 列时遇到问题。如果我使用以下UPDATE 语句:

UPDATE fruits
SET fruit_type = CASE WHEN event_date = '2019-01-01' THEN 'apple' END;

我得到错误:

[42804] 错误:列“fruit_type”属于“enum_fruits_fruit_type”类型,但表达式属于文本类型提示:您需要重写或强制转换表达式。

如果我在没有CASE 的情况下执行UPDATE 语句,那么我可以很好地更新该列:

UPDATE fruits
SET fruit_type = 'apple'
WHERE date = '2019-01-01';

我需要在我的UPDATE 语句中使用CASE,但如果该列的类型为enum,我似乎无法使用。有什么办法可以让它工作吗?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您必须将类型显式转换为枚举类型:

    UPDATE fruits
    SET fruit_type = CASE WHEN event_date = '2019-01-01' THEN 'apple'::enum_fruits_fruit_type END;
    

    我认为当你直接设置列时,postgresql会自动为你做,但它涉及到条件,它不能这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多