如何在不先声明枚举类型的情况下将 varchar 变量转换为枚举?

问题描述 投票:0回答:1

我正在使用 SELECT 从数据库生成结果集:

SELECT id countryname FROM dataset

其中 -countryname- 存储为 varchar。

我打算在此过程中将 -countryname- 转换为其等效的枚举类型,而不必首先运行标准声明语句:

CREATE TYPE countries AS ENUM ('US', 'France', 'S. Korea')

原因是,为了做出这样的声明,我需要所有可能的国家的列表。但我不容易获得此列表,必须首先通过查找 -countryname- 变量的不同值来获得。因此,必须添加这一行额外的声明似乎很笨拙且不必要。在我看来,PostgreSQL 有一个用于执行此操作的函数是合适的。

换句话说,我正在寻找类似于C中的countryname.Parse()方法(我猜?),或者pandas中的countryname.astype('category')方法,它负责声明和转换一步到位,例如:

SELECT id CONVERTION_FUNCTION(countryname) FROM dataset
sql postgresql enums
1个回答
0
投票
with data(s) as (
  select 'US' union all 
  select 'France' union all
  select 'S. Korea' 
)
select s::countries  from data;

如果您传递的字符串不是枚举的一部分,您将获得:

ERROR:  invalid input value for enum countries: ...
© www.soinside.com 2019 - 2024. All rights reserved.