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将满足其他条件 –