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

如何在Prisma ORM中正确筛选日期范围重叠的假期数据?

解决方案:PostgreSQL + Prisma 实现日期范围重叠查询

核心逻辑:日期范围重叠的判断规则

两个日期范围(假期范围 [H_start, H_end] 和筛选范围 [F_start, F_end])存在重叠的条件是:
H_start <= F_end 并且 H_end >= F_start

这个规则覆盖所有重叠场景:

  • 假期完全包含在筛选范围内
  • 筛选范围完全包含在假期内
  • 假期开始在筛选范围内、结束在范围外
  • 假期结束在筛选范围内、开始在范围外

Prisma 查询实现

替换你当前的where条件为以下逻辑:

where: {
  AND: [
    { dateStart: { lte: dto.dateEnd } },
    { dateEnd: { gte: dto.dateStart } }
  ]
}

针对你的示例验证

假期:2024-01-25 至 2024-02-02
筛选范围:2024-01-01 至 2024-01-31

  • dateStart (2024-01-25) <= 筛选dateEnd (2024-01-31) → 成立
  • dateEnd (2024-02-02) >= 筛选dateStart (2024-01-01) → 成立
    所以该假期会被正确查询到

额外注意事项

  • 日期格式与时区处理:确保前端传入的dateStart和dateEnd被正确转换为Prisma支持的DateTime格式(如ISO字符串)。建议统一使用UTC时间存储和查询,避免时区偏移导致的匹配错误。
  • 性能优化:为dateStart和dateEnd字段创建联合索引,提升范围查询效率:
    CREATE INDEX idx_holiday_date_range ON holiday(dateStart, dateEnd);
    
    (替换holiday为你的实际表名)
  • 版本兼容:你的Prisma 4.0.0版本完全支持上述AND数组写法,无需升级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:40:35