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

如何编写查询判断输入日期范围@FromDate/@ToDate不在数据库范围内

实现日期范围存在性判断的SQL查询

你需要编写SQL查询,判断输入的@FromDate和@ToDate组成的日期区间是否与数据库中已有的所有日期范围完全无交集,无交集时返回true,否则返回false。

核心SQL查询(以SQL Server为例)

SELECT 
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM DateRanges
            WHERE StartDate <= @ToDate 
              AND EndDate >= @FromDate
        ) THEN CAST(0 AS BIT) -- 存在重叠,返回false
        ELSE CAST(1 AS BIT) -- 无重叠,返回true
    END AS IsRangeNotExists;

逻辑说明

  1. 区间重叠判断:使用标准的区间重叠条件StartDate <= @ToDate AND EndDate >= @FromDate,只要数据库中存在任意一条记录满足该条件,就说明输入的日期范围与已有范围存在交集。
  2. 结果映射:
    • 若存在重叠记录,EXISTS返回true,通过CASE语句返回0(对应逻辑false)。
    • 若没有任何重叠记录,EXISTS返回false,返回1(对应逻辑true)。

适配不同数据库

  • 如果使用MySQL,可直接用布尔值替换类型转换:
SELECT 
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM DateRanges
            WHERE StartDate <= @ToDate 
              AND EndDate >= @FromDate
        ) THEN FALSE
        ELSE TRUE
    END AS IsRangeNotExists;

对应用户示例验证

  • 输入@FromDate='2024-01-18'、@ToDate='2024-01-21':无重叠记录,返回true。
  • 输入@FromDate='2024-01-18'、@ToDate='2024-01-24':与已有区间重叠,返回false。
  • 输入@FromDate='2024-01-06'、@ToDate='2024-01-08':与已有区间重叠,返回false。
  • 输入@FromDate='2024-01-09'、@ToDate='2024-01-09':无重叠记录,返回true。

内容的提问来源于stack exchange,提问作者Duy Khương

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:01:05