使用 "using" 子句的非平凡用法来更改列类型

Alter column type with non-trivial usage of "using" clause

假设我们将这个 table 命名为“mytable”:

name [varchar] eating_habits [int]
Anna 1
Roland 3
Sepp 1
Katrin 2
Lukas 4
Hedwig 3

现在我意识到我想将 colum vegetarian 更改为特定的。我创建自己的枚举类型:

CREATE TYPE diet AS ENUM ('vegetarian', 'vegan', 'omni');

我想要的是将“eating_habits”列的类型更改为“饮食”。为此,我还想在这样的类型之间进行映射

1 --> 'vegan'
2 --> 'vegetarian'
rest --> 'omni'

我该怎么做?我知道可以像这样使用 USING 子句:

ALTER TABLE mytable
  ALTER COLUMN eating_habits TYPE diet
  USING (
    <Expression>
  )

但我不知道“Expression”应该是什么,而且网上的绝大多数例子都是琐碎的转换。

您需要一个 CASE 表达式:

ALTER TABLE mytable
  ALTER COLUMN eating_habits TYPE diet
  USING ( 
      case eating_habits 
        when 1 then 'vegan'::diet 
        when 2 then 'vegetarian'::diet 
        else 'omni'::diet
      end
  )