我需要根据以下几点获得一组记录:
startdate
和endate
不为空,那么opendate
应介于startdate
和d enddate
之间或(closedate
之间startdate
和enddate
)startdate
不为空且enddate
为空,则为opendate = startdate
startdate
为空且enddate
不为空,则closedate = enddate
startdate
和enddate
都为空,则它应检索所有数据我使用下面的查询尝试了这一点,但它只满足第2点到第4点。
Select * From CheckDateValues C
Where
1 = 1 and
C.OPenDate >= Case
When (@OpenDate IS NULL) THEN C.OpenDate Else @OpenDate
End
and
C.CloseDate <= Case
When (@CloseDate IS NULL) THEN C.CloseDate Else @CloseDate
End
我不确定如何编写查询以使Point 1也能正常工作。
答案 0 :(得分:0)
我认为您正在尝试确定两个范围之间的某种形式的重叠 - 一个在表格列中,另一个在变量中。如果是这样,我会给你通常的重叠测试:
Select * From CheckDateValues C
where C.OpenDate <= COALESCE(@CloseDate,C.CloseDate) and
COALESCE(@OpenDate,C.OpenDate) <= C.CloseDate
其中(使用COALESCE
消除变量中的NULL
值)归结为:
如果符合以下两个时段重叠:
这是一个比大多数人通常想出的更简单的定义,并且避免列举大量案例。