根据特定日期返回行

时间:2019-08-20 06:47:41

标签: sql-server tsql

我有以下示例数据。

如何根据日期返回正确的行?

例如,如果日期是:

8月20日-只有记录ID 2和4会返回

8月2日-只有记录ID 1和3会返回

8月8日-只有记录ID 1和2会返回

7月15日-只有记录ID 3会返回

Create table #temp
(
    ID int,
    StartDate datetime,
    EndDate datetime NULL
)

insert into #temp
(
    ID,
    StartDate,
    EndDate
)
select
    1,
    '01 Aug 2019',
    '12 Aug 2019'
union all
select
    2,
    '04 Aug 2019',
    NULL
union all
select
    3,
    '01 Jul 2019',
    '03 Aug 2019'
union all
select
    4,
    '14 Aug 2019',
    NULL

3 个答案:

答案 0 :(得分:1)

您可以在逻辑下尝试此操作-

DECLARE @DT DATE = '20190802'

SELECT * FROM #temp
WHERE (@DT>= StartDate AND @DT <= EndDate)
OR  (EndDate IS NULL AND @DT >= StartDate)

答案 1 :(得分:1)

这是一种sargable的实现方式:

SELECT ID,
       StartDate,
       EndDate
FROM #temp
WHERE StartDate <= @SearchDate
AND (EndDate IS NULL OR EndDate > @SearchDate)

答案 2 :(得分:1)

select * 
from #temp
where @searchdt >= StartDate 
    and (@searchdt <= EndDate OR EndDate is null)