Sql 在开始日期和结束日期之间;不提取超过日期的记录

Sql 在开始日期和结束日期之间;不提取超过日期的记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,目前正在处理一个t-sql查询,该查询应该获取当前会计年度之间的所有记录的列表(我们使用4-4-5日历)。 该记录的开始和结束日期分别为2018年2月6日和2020年7月31日 我筛选的日期为: DECLARE @StartDate DATE = '12-29-2018'; DECLARE @EndDate DATE = '12-31-2019'; 我在where条款中的条件是: AND ( (o.Revenue_Start_Date__c >

目前正在处理一个t-sql查询,该查询应该获取当前会计年度之间的所有记录的列表(我们使用4-4-5日历)。 该记录的开始和结束日期分别为2018年2月6日和2020年7月31日

我筛选的日期为:

DECLARE @StartDate DATE = '12-29-2018';
DECLARE @EndDate DATE = '12-31-2019'; 
我在where条款中的条件是:

 AND
          (

          (o.Revenue_Start_Date__c >= @StartDate AND  o.Revenue_End_Date__c <= @EndDate) OR (o.Revenue_End_Date__c >= @StartDate AND  o.Revenue_End_Date__c <= @EndDate)
          )
和
(
(o.Revenue\u Start\u Date\u c>=@StartDate和o.Revenue\u End\u Date\u c=@StartDate和o.Revenue\u End\u Date\u c@EndDate
)
)

这对我来说似乎很管用

对于失败案例,这应该是可行的

o.Revenue\u Start\u Date\u c=@StartDate

这就是你想要的吗

(o.Revenue_Start_Date__c < @EndDate AND 
 o.Revenue_End_Date__c >= @StartDate
)
(o.Revenue\u Start\u Date\u c<@EndDate和
o、 收入结束日期>=@StartDate
)

这是重叠间隔的逻辑。请注意,这些不等式可能是精确的,也可能是不精确的,这取决于您对重叠的实际定义。

@ae15 Yes。在我看来,这很好。但有两个条件比有几个更简单。我也发布了一张图片,展示了它是如何工作的。这是您的查询需要解决的五个案例。大约10年前,一位开明的工程师向我展示了这一点:)投票的结果不仅是因为它是正确的,而且是因为它的便笺簿图片!重叠范围的一般检查是
Start1
(o.Revenue_Start_Date__c < @EndDate AND 
 o.Revenue_End_Date__c >= @StartDate
)