Postgres SQL -检查参数是否为空



我在Java7应用程序中使用Postgres 12.6使用hibernate Native查询。

我试图构建一个SQL语句,从表journalheader中读取结果,它接收一个参数。参数值可以是'Matched'"无与伦比">.

下面的解决方案是不够的,因为它不满足null值:

select * from journalheader where matched_status = ?1;

表中确实有一些行是nullmatched_status列。我希望这些行是'Unmatched'的一部分过滤器。

  • 如果参数(?1)'Matched',那么它将只返回行wherematched_status= 'Matched'.
  • 如果参数(?1)'Unmatched',那么它将只返回行wherematched_status= 'Unmatched' or null.

问题

我如何检查null值?

<可能的解决方案/strong>

我想我可能需要对参数值添加一个检查,如果它是'Unmatched'在语句中包含or matched_status is null。我只是不确定如何检查sql语句中参数的值。

select * from journalheader where matched_status = ?1 or <if ?1 equals 'Unmatched'> matched_status is null;

您可以使用关键字COALESCE

select * from journalheader where COALESCE(matched_status, 'Unmatched') = ?1;

这意味着使用matched_status的值,除非值是null,如果值是null,则使用Unmatched的值

您可以尝试使用COALESCE:

select * 
from journalheader 
where matched_status = COALESCE(?1,'Unmatched') 

CASE WHEN:

select * 
from journalheader 
where matched_status =CASE WHEN ?1 is null THEN 'Unmatched' ELSE ?1 END  

相关内容

最新更新