在WHERE子句中将字符串数组转换为自定义枚举类型

时间:2019-12-23 17:45:58

标签: sql postgresql hibernate jpa casting

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

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

但是由于我试图绕过我在sql枚举类型上使用带注释的过滤器的某些JPA /休眠问题,因此需要将枚举字符串动态添加到列表中。因此,我试图找出如何将整个字符串列表转换为enum_types列表。我猜是这样的:

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

但是我尝试过的很多都没有给我带来任何运气。

1 个答案:

答案 0 :(得分:2)

使用= 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')