正しく動作することができない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の場合、NULLまたは開始日より大きいを返す
- 開始日と終了日の両方がNULLの場合、日付がNULLのレコードのみを返します
今私が得ることができるのは、日付範囲またはすべてのレコードのNULLと有効な日付だけです。