我有一个SSRS报告,其中包含两个可为空的日期选择器参数-开始日期和结束日期。
在查询中,我想选择这些日期之间的值,或者如果其中一个(或两个)日期为null。
我尝试过:
WHERE ... AND (StartDateTime >= @FromDateTime OR his.StartDateTime is null) AND (EndDateTime <= @ToDateTime OR EndDateTime is null)
及其相关变化,但我无法使其正常工作。我正在考虑编写一个存储的proc来对临时表执行此操作,但想查看在where子句中是否有一种简单的方法来完成此操作。
答案 0 :(得分:0)
这里有几种可能的情况。
您希望参数为可选
这通常称为厨房水槽查询。
WHERE <some conditions>
AND (StartDateTime >= @FromDateTime OR @FromDateTimeis null)
AND (EndDateTime <= @ToDateTime OR @ToDateTime is null)
您需要阅读一些关于此的博客。
您的StartDateTime和EndDateTime为空
在这种情况下,您想将NULL
参数与NULL
日期进行比较
WHERE <some conditions>
AND (StartDateTime >= @FromDateTime OR (@FromDateTime is null and StartDateTime is null))
AND (EndDateTime <= @ToDateTime OR (@ToDateTime is null and EndDateTime is null))
您希望将最优参数逻辑应用于数据,而不是参数
这基本上就是您已经拥有的,这就是为什么我没想到它就是您想要的。
WHERE <some conditions>
AND (StartDateTime >= @FromDateTime OR StartDateTime is null)
AND (EndDateTime <= @ToDateTime OR EndDateTime is null)