2012-06-04 162 views
0

我有一個SQL查詢,我無法正常工作SQL查詢返回日期範圍或所有記錄或只有空記錄

這是查詢的簡化版本。

select * from Permit 
inner join BMP on Permit.PermitNumber = BMP.PermitNumber 
left join BMPInspection as BI on Permit.PermitNumber = BI.PermitNumber and BMP.BMPNumber = BI.BMPNumber 

where Permit.PermitNumber = 'S002552' 
AND ((@StartDate IS NULL 
      AND @EndDate IS NULL) 
      OR (BI.dtActionDate > Dateadd(day, -1, @StartDate) 
       AND BI.dtActionDate < Dateadd(day, 1, @EndDate)) 
      OR (BI.dtActionDate > Dateadd(day, -1, @StartDate) 
       AND @EndDate IS NULL) 
      OR (@StartDate IS NULL 
       AND BI.dtActionDate < Dateadd(day, 1, @EndDate))) 

的期望的行爲是

  1. 返回僅在當開始日期和結束日期被指定於結束日期
  2. 返回NULL日期或更小的時間範圍記錄時的開始日期是NULL和端日期有一個日期
  3. 返回NULL或大於開始日期當開始日期有一個日期和結束日期爲空
  4. 返回只有開始日期和en d日期爲空

現在我可以得到的是日期範圍或所有記錄NULLS和有效日期。

回答

0

對於這種情況:

返回只有當兩個開始日期和結束日期 是一個NULL日期記錄NULL

變化:

(@StartDate IS NULL AND @EndDate IS NULL) 

(@StartDate IS NULL AND @EndDate IS NULL AND BI.dtActionDate IS NULL) 
+0

Duh,我一直盯着這個四個多小時。非常感謝。 –

+0

並且通過擴展將'code'OR BI.dtActionDate添加到其他短語的NULL將滿足其他條件 –

相關問題