sql - 如何返回开始日期和结束日期之间的记录
问题描述
我有以下查询返回开始日期或结束日期在指定日期范围之间的记录。
DECLARE @ReportStartDate date = '01 Apr 2019'
DECLARE @ReportEndDate date = '01 May 2019'
select * from #temp
where
(StartDate between @ReportStartDate and @ReportEndDate) or
(EndDate between @ReportStartDate and @ReportEndDate) or
(EndDate is null)
我遇到的问题是开始日期是“2019 年 3 月 1 日”,结束日期是“2019 年 8 月 4 日”,这意味着它在 2019 年 4 月 1 日和 2019 年 5 月 1 日的日期范围内,但我的标准不符合那。
我怎么能包括那些类型的记录?
样本数据:
CREATE TABLE #temp
(
ID int,
StartDate datetime,
EndDate datetime NULL
)
insert into #temp
(
ID,
StartDate,
EndDate
)
select
1,
'01 Mar 2019',
NULL
union all
select
2,
'01 Mar 2019',
'04 Aug 2019'
union all
select
3,
'14 Jul 2019',
NULL
解决方案
我将您的条件表述如下:
(StartDate <= @ReportEndDate AND EndDate >= @ReportStartDate)
OR EndDate is null
这实际上将检查日期范围是否重叠,这似乎是您正在寻找的。
身份证 | 开始日期 | 结束日期 -: | :----------------- | :----------------- 1 | 01/03/2019 00:00:00 | 无效的 2 | 01/03/2019 00:00:00 | 2019 年 4 月 8 日 00:00:00 3 | 14/07/2019 00:00:00 | 无效的