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

PostgreSQL中如何查询包含多个指定日期的日期范围行记录

找出包含指定日期列表的日期范围记录

针对你的需求,无需创建临时表,可通过以下几种方式动态处理日期集合:

方法1:使用数组+unnest(PostgreSQL专属)

利用PostgreSQL的数组和unnest函数将日期集合展开,结合EXISTS子查询匹配条件,逻辑清晰且无需临时表:

SELECT * 
FROM holiday 
WHERE EXISTS (
    SELECT 1 
    FROM unnest(ARRAY['2022-08-01'::date, '2022-08-05'::date, '2022-08-20'::date, '2022-09-02'::date]) AS target_days(day)
    WHERE holiday.startDate <= target_days.day 
      AND holiday.endDate >= target_days.day
);

若需复用日期集合,可将数组定义为变量(如PL/pgSQL中),实现完全动态的日期输入。

方法2:字符串拆分(多数据库通用)

如果你的数据库支持字符串拆分函数,可将日期列表作为字符串传入并拆分,无需临时表:

MySQL示例:

SELECT DISTINCT h.*
FROM holiday h
JOIN JSON_TABLE(
    '["2022-08-01", "2022-08-05", "2022-08-20", "2022-09-02"]',
    '$[*]' COLUMNS(day DATE PATH '$')
) AS target_days
WHERE h.startDate <= target_days.day 
  AND h.endDate >= target_days.day;

SQL Server示例:

SELECT DISTINCT h.*
FROM holiday h
JOIN STRING_SPLIT('2022-08-01,2022-08-05,2022-08-20,2022-09-02', ',') AS s
WHERE h.startDate <= CAST(s.value AS DATE) 
  AND h.endDate >= CAST(s.value AS DATE);

这些方法直接通过内置函数动态处理日期集合,查询逻辑与你原有的单日期/多OR条件完全一致,且无需创建临时表。

内容的提问来源于stack exchange,提问作者j.davies

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:54:38