0

我有一个无法正常工作的 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. 当开始日期和结束日期都为 NULL 时,只返回日期为 NULL 的记录

现在我能得到的只是日期范围或所有记录 NULLS 和有效日期。

4

1 回答 1

0

对于这种情况:

当开始日期和结束日期都为 NULL 时,只返回日期为 NULL 的记录

改变:

( @StartDate IS NULL AND @EndDate IS NULL )

( @StartDate IS NULL AND @EndDate IS NULL AND BI.dtActionDate IS NULL)
于 2012-06-04T16:26:44.890 回答