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

PostgreSQL查询含多JSON元素的Symbol报错,求正确SQL写法

问题解决与正确SQL语句

报错原因分析

  1. 列名拼写错误:你编写的SQL里把目标列名constituents误写为constitutents(缺少字母i),导致数据库无法定位正确列,进而误判处理对象为非数组类型。
  2. 数据类型不匹配:如果constituents列存储的是普通文本(而非JSONB类型),直接调用jsonb_array_length函数会因无法识别文本为JSON数组而触发报错。

正确SQL语句

情况1:constituents列已定义为JSONB类型

修正列名拼写即可:

SELECT DISTINCT "Symbol" 
FROM "MyTable" 
WHERE JSONB_ARRAY_LENGTH("constituents") > 1;

情况2:constituents列是文本类型(如VARCHAR)

需要先将文本转换为JSONB类型再计算数组长度:

SELECT DISTINCT "Symbol" 
FROM "MyTable" 
WHERE JSONB_ARRAY_LENGTH("constituents"::JSONB) > 1;

补充:兼容非法JSON数据的写法

如果表中存在部分行的constituents值不是合法JSON数组,可先过滤合法数据避免报错:

SELECT DISTINCT "Symbol" 
FROM "MyTable" 
WHERE "constituents" ~ '^\[.*\]$'
  AND JSONB_ARRAY_LENGTH("constituents"::JSONB) > 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:23