使用 "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
)
假设我们将这个 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
)