我有一个带有两个参数@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
不为空时。
答案 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)