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

PostgreSQL 10中JSON格式文本字段的查询关联及数据提取问题求助

解决PostgreSQL JSON字段查询与关联问题

针对你遇到的两个JSON字段处理难题,我整理了直接可用的SQL方案,一步到位解决问题:

1. 提取date_kg_later的最大日期

对于object表configuration字段里的date_kg_later数组,我们可以用jsonb_array_elements把数组拆分成单行数据,转成日期类型后取最大值;如果数组为空,就返回null。

2. 关联code_table获取类型名称

code_table的records是JSON数组,每个元素包含code和title,我们需要把这个数组展开,和object表的object_type_cd匹配,拿到对应的title。

完整查询SQL

SELECT
    o.id,
    o.name,
    ct.title AS object_type_name,
    -- 处理date_kg_later的最大日期
    (
        SELECT MAX(to_date(jsonb_array_elements_text(o.configuration->'date_kg_later'), 'YYYY-MM-DD'))
        WHERE jsonb_array_length(o.configuration->'date_kg_later') > 0
    ) AS date
FROM
    object o
LEFT JOIN LATERAL (
    -- 展开code_table的records数组,匹配code值
    SELECT records->>'title' AS title
    FROM code_table, jsonb_array_elements(code_table.records) AS records
    WHERE records->>'code' = o.object_type_cd
) ct ON true
ORDER BY o.id;

结果说明

这个查询完全符合你的预期输出:

  • 当date_kg_later是空数组时,date字段返回null
  • 当object_type_cd在code_table里找不到匹配项时,object_type_name返回null
  • 正常匹配时会返回对应的类型名称和数组中的最大日期

比如你的示例数据会输出:

id    name        object_type_name    date
1000  Headphones  tech                2022-04-30
1001  Pencil      null                null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:33:11