不要追加"和"当列值为null时where条件

时间:2018-06-05 11:41:21

标签: sql oracle spring-data-jpa

我有一个查询,其中我不想追加"和"列值为空时的条件,例如

select * from x where x.abc = 'ACTIVE' and x.start_date < sysdate and x.end_date > sysdate

所以我希望x.end_date仅在其值不为null时才适用。没有任何存储过程,只是一个简单的查询。

我还想使用条件构建器和谓词将此查询转换为spring-data jpa规范。

3 个答案:

答案 0 :(得分:5)

您可以使用or

select *
from x
where x.abc = 'ACTIVE' and
      x.start_date < sysdate and
      ( x.end_date > sysdate or x.end_date is null );

答案 1 :(得分:2)

您可以查看NVL功能。

select * from x
 where x.abc = 'ACTIVE' 
   and x.start_date < sysdate 
   and NVL(x.end_date,sysdate) >= sysdate

答案 2 :(得分:0)

并不是说其他​​答案都不对或不好,但我会稍微改写一下,并将其发布在此处,希望有人对于为什么一种方式可能比另一种方式更好而有一个有趣的评论。 / p>

这是我写的:

select * from x
 where x.abc = 'ACTIVE' 
   and sysdate between x.start_date and nvl(x.end_date,sysdate);

对我而言,其内容为:&#34;当前日期必须在记录的有效日期范围内#34;。