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

SQL Server:检查日期区间匹配及五类场景判断的技术问询

SQL Server 日期区间匹配场景分类实现方案

针对你提到的五类日期区间匹配场景,我整理了一个直接可用的SQL实现,用CASE WHEN就能清晰区分每一类,逻辑清晰还容易调整:

首先,我们先定义指定的目标日期区间(用变量更灵活,你也可以直接替换成实际日期值):

DECLARE @TargetStartDate DATE = '2018-10-17';
DECLARE @TargetEndDate DATE = '2018-10-19';

SELECT
    ID, -- 替换成Table1的主键或你需要展示的其他字段
    StartDate,
    EndDate,
    CASE
        -- 场景1:完全在指定日期范围内
        WHEN StartDate >= @TargetStartDate AND EndDate <= @TargetEndDate
            THEN '完全在指定范围内'
        -- 场景2:完全覆盖指定日期范围
        WHEN StartDate <= @TargetStartDate AND EndDate >= @TargetEndDate
            THEN '完全覆盖指定范围'
        -- 场景3:完全早于指定起始日期
        WHEN EndDate < @TargetStartDate
            THEN '完全早于指定起始日期'
        -- 场景4:起始日期匹配且结束日期晚于指定结束日期
        WHEN StartDate = @TargetStartDate AND EndDate > @TargetEndDate
            THEN '起始匹配且结束晚于指定结束'
        -- 场景5:无关日期区间(完全晚于指定结束日期)
        WHEN StartDate > @TargetEndDate
            THEN '无关日期区间'
        -- 兜底:如果有特殊边界情况(比如部分重叠但未命中上述场景),可以在这里补充
        ELSE '其他未分类场景'
    END AS DateRangeMatchType
FROM Table1;

几个关键提醒:

  • 如果你的StartDate和EndDate是DATETIME类型,建议转成DATE类型(比如CAST(StartDate AS DATE))来忽略时分秒的干扰,避免因为时间部分导致判断偏差。
  • 场景判断的顺序很重要!要先处理精确匹配的场景(比如完全包含、完全覆盖),再判断早于、晚于这类范围场景,防止逻辑被提前覆盖。
  • 要是需要复用这个逻辑,可以把它封装成标量函数或者表值函数,方便在其他查询里直接调用。

用你给出的测试数据验证的话,每条记录都会被准确归类到对应的场景里:

  • 2018/10/17 - 2018/10/19 → 完全在指定范围内
  • 2018/10/14 - 2018/10/21 → 完全覆盖指定范围
  • 2018/10/13 - 2018/10/16 → 完全早于指定起始日期
  • 2018/10/17 - 2018/10/20 → 起始匹配且结束晚于指定结束
  • 2018/11/17 - 2018/11/21 → 无关日期区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:41:17