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

如何在PostgreSQL中检查某个值是否存在于数组字段中?

PostgreSQL数组查询正确用法说明

首先先修正你创建表和插入数据的语法错误:
PostgreSQL中插入数组数据需要用标准的数组构造语法,你原来的插入语句会报错,正确写法如下:

CREATE TABLE Table1 (
  examples text ARRAY
);

-- 两种合法的数组插入方式
INSERT INTO Table1 (examples)
VALUES 
(ARRAY['t1', 't2', 't3']),  -- 使用ARRAY构造器
('{"t1","t2","t3"}');       -- 使用带引号的字符串形式数组

接下来解释你困惑的ANY用法:
你看到的示例95 < any (round_scores),是将单个值与数组中的每个元素做比较——只要数组round_scores里存在任意一个元素大于95,这条记录就会被筛选出来。

而你想要实现的“判断某个值是否存在于数组列中”,正确的查询方式有两种:

方式1:使用= ANY()

这和你尝试的写法逻辑一致,注意要把待匹配的值放在左侧,数组列作为ANY()的参数,比如要筛选examples数组包含't2'的记录:

SELECT * FROM Table1 WHERE 't2' = ANY(examples);

这条语句的逻辑是:检查数组examples中的任意元素是否等于't2',只要有一个匹配就返回该行。

方式2:使用数组包含运算符@>

PostgreSQL提供了更直观的数组包含运算符,写法更简洁,性能在有数组索引的场景下更优:

SELECT * FROM Table1 WHERE examples @> ARRAY['t2'];

@>表示左侧数组包含右侧数组(这里右侧是仅含目标值的单元素数组),效果和= ANY()完全一致。

补充说明IN和ANY的区别:

  • IN只能跟离散值列表(比如IN ('t1','t2')),无法直接接收数组列作为参数
  • ANY()可以直接接收数组列,专门用来实现“值是否存在于数组中”的判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:37:40