where子句中空值的案例声明

时间:2019-01-20 22:18:59

标签: sql-server case

我有一个带有两个参数@DateFrom@DateTo的sql过程,并且内部有sql查询。 例如

Select *
From Produc p
where p.ProductType = 1 
and ( ProductCategory = 5 
      or ProductCatalogId =3)
     or           
      (p.StartDate between @DateFrom and @DateTo)

但是我想要最后一个或仅当参数@DateFrom@DateTo不为空时。

2 个答案:

答案 0 :(得分:2)

尝试:

<div class="row">
  <div class="col-md-4" id="spacer"></div>
  <div class="col-md-4" id="correctAnswersIntro">Correct answers:</div>
  <div class="col-md-4" id="correctAnswersList">You got question 1 right<br></div>
</div>

尽管我想知道这是否是您要寻找的逻辑,但以下可能是您真正想要的。

select *
from Product p
where (
  p.ProductType = 1
  and (ProductCategory = 5 or ProductCatalogId =3)
)
or (
  @DateFrom is not null and @DateTo is not null
  and p.StartDate between @DateFrom and @DateTo
)

答案 1 :(得分:1)

听起来您希望参数是可选的。因此,当参数为null时,您想忽略它,并且不应用其日期范围限制。

可选参数的典型方式:

p.StartDate between coalesce(@DateFrom, p.StartDate) and coalesce(@DateTo, p.StartDate)

另一种更长,但更直接的方法:

(p.StartDate >= @DateFrom or @DateFrom is null)
and
(p.StartDate <= @DateTo or @DateTo is null)