我在Java7应用程序中使用Postgres 12.6使用hibernate Native查询。
我试图构建一个SQL语句,从表journalheader
中读取结果,它接收一个参数。参数值可以是'Matched'或"无与伦比">.
下面的解决方案是不够的,因为它不满足null
值:
select * from journalheader where matched_status = ?1;
表中确实有一些行是null
的matched_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