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

如何编写SQL基于指定日期范围筛选存在旅行重叠的旅行者

修正SQL语句以返回与查询日期范围重叠的旅行者

原SQL语句的WHERE条件仅筛选旅行时段完全处于查询日期范围内的记录,无法满足“旅行时段与查询范围存在任意重叠即返回”的需求。

正确的时间段重叠判断逻辑

两个时间段(旅行时段[DepartureDate, ReturnDate]和查询时段[@DateFrom, @DateTo])存在重叠的核心判断条件是:

DepartureDate <= @DateTo AND ReturnDate >= @DateFrom

这个条件可以覆盖所有重叠场景:

  • 旅行时段完全包含在查询范围内
  • 查询范围完全包含在旅行时段内
  • 旅行出发于查询范围内、返回于查询范围外
  • 旅行返回于查询范围内、出发于查询范围外

修正后的完整SQL代码

DECLARE @DateFrom      DATE         = '2022-01-05',
        @DateTo        DATE         = '2022-01-15'

DROP TABLE IF EXISTS #Dates

CREATE TABLE #Dates
(
    DepartureDate  Date       NULL,
    ReturnDate     Date       NULL,
    Name           VARCHAR(8) NULL
)

INSERT INTO #Dates (DepartureDate, ReturnDate, Name)
VALUES ('2022-01-01', '2022-01-10', 'Mike' )

SELECT * 
FROM   #Dates
WHERE  DepartureDate <= @DateTo  -- 旅行开始不晚于查询结束
AND    ReturnDate >= @DateFrom   -- 旅行结束不早于查询开始

验证示例

  • 当@DateFrom='2022-01-05'、@DateTo='2022-01-15'时,Mike的旅行时段与查询范围重叠,会被正确返回;
  • 当@DateFrom='2021-12-01'、@DateTo='2021-12-05'时,两者无重叠,不会返回Mike的记录,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:40:26