首页 > 解决方案 > 在 WHERE 子句中将字符串数组单独转换为自定义枚举类型

问题描述

我正在尝试将字符串列表转换为自定义枚举类型列表。我正在寻找的效果可以通过以下方式实现:

select * from table_1 where column_a in (cast('ENUM1' AS custom_enum), cast('ENUM2' AS custom_enum))

但由于我试图绕过一些 JPA/hibernate 问题,我在 sql 枚举类型上使用带注释的过滤器,我需要动态地将枚举字符串添加到列表中。所以我试图弄清楚如何将整个字符串列表转换为 enum_types 列表。我猜是这样的:

select * from table_1 where column_a in (cast({'ENUM1', 'ENUM2'} AS custom_enum[]))

但我尝试过的并没有给我带来任何运气。

标签: sqlpostgresqlhibernatejpacasting

解决方案


使用= ANY而不是IN. 数组文字应该用引号引起来:

select * 
from table_1 
where column_a = any (cast('{ENUM1, ENUM2}' as custom_enum[]))

或将列转换为text

select * 
from table_1 
where column_a::text in ('ENUM1', 'ENUM2')

推荐阅读