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

T-SQL查询两表时间区间重叠且name、room字段匹配的实现方案

T-SQL 区间匹配校验实现

核心逻辑说明

  • 时间区间重叠判断采用通用反推公式:两个区间不重叠的唯一条件是「A的结束时间 < B的开始时间 或 B的结束时间 < A的开始时间」,对该条件取反即可覆盖所有重叠场景,无需嵌套判断:
    init.date_from <= check.date_to AND check.date_from <= init.date_to
    
  • 额外匹配name、room两个字段完全相等即可满足校验规则
  • 采用EXISTS关键字实现,匹配到符合条件的记录就直接返回结果,执行效率更高

实现代码

场景1:判断@check_table中是否存在任意符合条件的匹配记录,返回1/0

SELECT CASE WHEN EXISTS(
    SELECT 1
    FROM @check_table c
    INNER JOIN @init_table i 
        ON c.name = i.name 
        AND c.room = i.room
        AND i.date_from <= c.date_to 
        AND c.date_from <= i.date_to
) THEN 1 ELSE 0 END AS is_match

示例数据执行后返回1,表示存在匹配记录。

场景2:给@check_table每一行单独标记是否存在匹配

SELECT 
    c.line_id,
    c.date_from,
    c.date_to,
    c.name,
    c.room,
    CASE WHEN EXISTS(
        SELECT 1 FROM @init_table i
        WHERE i.name = c.name 
        AND i.room = c.room
        AND i.date_from <= c.date_to 
        AND c.date_from <= i.date_to
    ) THEN 1 ELSE 0 END AS is_match
FROM @check_table c

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:06:05