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)))
的期望的行爲是
- 返回僅在當開始日期和結束日期被指定於結束日期
- 返回NULL日期或更小的時間範圍記錄時的開始日期是NULL和端日期有一個日期
- 返回NULL或大於開始日期當開始日期有一個日期和結束日期爲空
- 返回只有開始日期和en d日期爲空
現在我可以得到的是日期範圍或所有記錄NULLS和有效日期。
Duh,我一直盯着這個四個多小時。非常感謝。 –
並且通過擴展將'code'OR BI.dtActionDate添加到其他短語的NULL將滿足其他條件 –