我有一个查询,其中我不想追加"和"列值为空时的条件,例如
select * from x where x.abc = 'ACTIVE' and x.start_date < sysdate and x.end_date > sysdate
所以我希望x.end_date仅在其值不为null时才适用。没有任何存储过程,只是一个简单的查询。
我还想使用条件构建器和谓词将此查询转换为spring-data jpa规范。
答案 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;。