我有以下示例数据。
如何根据日期返回正确的行?
例如,如果日期是:
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
答案 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)