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

PostgreSQL中如何对比二维数组列与其他列并生成布尔值?

解决方案

方法:使用unnest结合EXISTS子查询

你可以通过unnest将二维数组dates_array展开为行记录,再用EXISTS子查询判断是否存在满足条件的子数组。以下是完整SQL语句:

SELECT 
    cid,
    mid,
    date_start,
    date_end,
    dates_array,
    -- 检查是否存在满足条件的子数组
    EXISTS (
        SELECT 1
        FROM unnest(dates_array) AS sub_dates(arr_start, arr_end)
        WHERE date_start > arr_start AND date_end < arr_end
    ) AS is_contained
FROM your_table;

逻辑说明

  1. unnest(dates_array):将每行的二维日期数组拆分为多行,每行对应一个子数组的两个日期(arr_start为子数组的起始日期,arr_end为结束日期)。
  2. EXISTS子查询:只要找到任意一个满足date_start > arr_start AND date_end < arr_end的子数组,就返回true,否则返回false。
  3. 最终新增的is_contained列就是你需要的布尔值结果。

针对示例数据的结果

按照你的条件(严格大于/小于),示例中所有行的is_contained都会是false,因为没有任何一行的日期区间被dates_array里的其他子数组完全包含(所有子数组要么和当前行区间完全重合,要么是前后衔接的区间)。如果需要调整判断逻辑(比如允许等于),只需修改WHERE子句的运算符(例如>=或<=)即可。

内容的提问来源于stack exchange,提问作者nakkhatra-opti

相关产品推荐
方舟 Agent Plan

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

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