如何在开始日期和结束日期之间返回记录

时间:2019-09-02 10:16:53

标签: sql sql-server tsql

我有以下查询,返回开始日期或结束日期在指定日期范围之间的记录。

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

1 个答案:

答案 0 :(得分:5)

我会说出你的情况,如下:

5

这实际上将检查日期范围是否重叠了,这似乎正是您想要的。

Demo on DB Fiddle

ID | StartDate           | EndDate            
-: | :------------------ | :------------------
 1 | 01/03/2019 00:00:00 | null               
 2 | 01/03/2019 00:00:00 | 04/08/2019 00:00:00
 3 | 14/07/2019 00:00:00 | null