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

PostgreSQL查询数组列含指定值报错,求正确写法

PostgreSQL数组列包含指定值的查询问题

表结构与测试数据

CREATE TABLE "public"."test" (
    "id" integer NOT NULL,
    "game_ids" integer[],
    CONSTRAINT "test_pkey" PRIMARY KEY ("id")
);

INSERT INTO "public"."test" ("id", "game_ids") VALUES
(1, '{5,6,7}'),
(2, '{5,12,18}'),
(3, '{12,13,18}'),
(4, '{14,22,23}');

需求

查询所有game_ids列包含值12的行。

错误尝试分析

你写的几个查询语句都存在语法或类型匹配问题:

  • SELECT * FROM test WHERE ANY game_ids = 12;:ANY操作符语法错误,PostgreSQL中ANY需要将目标数组用括号包裹,且正确比较顺序应为值 = ANY(数组列)
  • SELECT * FROM test WHERE game_ids @> [12];:数组字面量格式错误,PostgreSQL中数组需用单引号包裹的{}格式,而非[]
  • SELECT * FROM test WHERE game_ids @> 12;:@>是数组包含运算符,要求两边均为数组类型,这里12是单个整数,类型不匹配
  • SELECT * FROM test WHERE 12 = ANY game_ids;:缺少括号,ANY后的数组必须用括号包裹,即ANY(game_ids)
  • SELECT * FROM test WHERE game_ids >@ [12];:运算符方向错误(正确包含运算符是@>),同时数组格式错误

正确查询语句

方法1:使用ANY操作符

SELECT * FROM test WHERE 12 = ANY(game_ids);

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

SELECT * FROM test WHERE game_ids @> '{12}'::integer[];

或者更直观的数组构造写法:

SELECT * FROM test WHERE game_ids @> ARRAY[12];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:28:08