@开始日期和结束日期之间;不提取超出日期的记录

时间:2019-01-29 16:42:53

标签: sql sql-server tsql

当前正在处理t-sql查询,该查询应获取当前会计年度之间所有记录的列表(我们使用4-4-5日历)。 记录的开始和结束日期是06/02/2018,31/07/2020。

我要过滤的日期是:

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)
          )

我也尝试过BETWEEN的变体。任何想法,我可能做错了什么,如果它在相应的日期之内,我如何获得所有记录的清单。

答案:

AND  (  -- Starts Within range
  ( o.Revenue_Start_Date__c 
    BETWEEN @StartDate
    AND     @EndDate
  )
OR  -- Ends within range
  (
    o.Revenue_End_Date__c
    BETWEEN @StartDate
    AND     @EndDate
   )
OR    -- SPANS Range
   (
     o.Revenue_Start_Date__c < @StartDate
     AND
     o.Revenue_End_Date__c > @EndDate  
    )
    )

这似乎刚刚对我有用。

2 个答案:

答案 0 :(得分:1)

对于失败的情况,这应该起作用。

def onboarding_image_url(default_value=nil) onboarding_image.present? ? onboarding_image.url : default_value end

enter image description here

答案 1 :(得分:0)

这是您想要的吗?

(o.Revenue_Start_Date__c < @EndDate AND 
 o.Revenue_End_Date__c >= @StartDate
)

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