You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查询枚举数组列包含指定数组任意值的记录

问题说明

存在一张名为projects的数据表,表中operating_system列为枚举数组类型,列数据样例如下:
列数据样例
需要查询operating_system列中包含目标数组['ios', 'windows']任意值的所有项目记录,预期返回第1、4、7、9条记录。
尝试执行的SQL语句如下:

SELECT * FROM public.projects
WHERE operating_system = ANY (['ios', 'windows']);

执行后抛出语法错误:

ERROR:  syntax error at or near "["  
LINE 2: WHERE operating_system = ANY (['ios', 'windows']);
错误原因
  • PostgreSQL不支持直接用[]定义数组字面量,这是触发语法报错的直接原因。
  • 即使修正数组写法,= ANY(...)的逻辑是判断字段值是否等于数组列表中的某一个元素,不适用于数组类型字段的交集匹配场景,无法得到预期结果。
正确查询语句

PostgreSQL提供了数组重叠运算符&&,专门用来判断两个数组是否存在共同元素,正好匹配“包含目标数组任意值”的需求,推荐写法如下:

SELECT * FROM public.projects
WHERE operating_system && ARRAY['ios', 'windows'];

如果执行时提示类型不匹配,给数组加上对应枚举类型的强转即可,把下方的your_enum_type替换成operating_system列实际对应的枚举类型名:

SELECT * FROM public.projects
WHERE operating_system && ARRAY['ios', 'windows']::your_enum_type[];

也可以使用字符串转数组的写法:

SELECT * FROM public.projects
WHERE operating_system && '{ios, windows}'::your_enum_type[];
扩展说明
  • 如果后续需要查询operating_system同时包含目标数组所有值的记录,把运算符替换为@>即可。
  • 不建议用ANY搭配数组元素遍历的写法,性能远低于&&运算符。

内容的提问来源于stack exchange,提问作者rafaelgara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:29:00