如何在SQL Server中筛选与指定日期范围重叠的记录?
在SQL Server中筛选与指定日期范围重叠的记录
核心思路是筛选出记录的时间区间与请求的目标日期范围存在重叠的数据行,对应的SQL判断逻辑是:记录的Start Date不晚于请求的结束日期,同时记录的End Date不早于请求的起始日期。
具体实现代码
假设你的表名为YourTable,可以通过以下方式实现:
使用变量传递日期参数(推荐,便于复用)
-- 定义请求的起始和结束日期参数 DECLARE @RequestStartDate DATE = '31-AUG-2015' DECLARE @RequestEndDate DATE = '31-AUG-2016' SELECT Value, [Start Date], [End Date] FROM YourTable WHERE [Start Date] <= @RequestEndDate AND [End Date] >= @RequestStartDate
直接写入日期条件
如果不需要复用参数,也可以直接将日期写在查询语句中:
-- 查询2016-07-31至2016-08-31范围内重叠的记录 SELECT Value, [Start Date], [End Date] FROM YourTable WHERE [Start Date] <= '31-AUG-2016' AND [End Date] >= '31-JUL-2016'
逻辑验证
- 当请求日期为
31-JUL-2016至31-AUG-2016时:
第一行记录的End Date是30-Jun-16,早于请求起始日期,不满足条件被排除;第二行记录的时间区间与请求范围重叠,会被返回。 - 当请求日期为
31-AUG-2015至31-AUG-2016时:
两行记录的时间区间都与请求范围存在重叠,因此会全部返回。
内容的提问来源于stack exchange,提问作者karthick
相关产品推荐
相关产品推荐

