Postgres SQL - 检查参数是否为空

Postgres SQL - check if parameter is null

我在使用休眠本机查询的 Java7 应用程序中使用 Postgres 12.6。

我正在尝试构建一个 SQL 语句,该语句从接收一个参数的 table journalheader 中读取结果。参数值可以是 'Matched' 或者 'Unmatched'.

以下解决方案是不够的,因为它不适合 null 值:

select * from journalheader where matched_status = ?1;

table 确实有一些行具有 nullmatched_status 列。我希望这些行成为 'Unmatched' 过滤器的一部分。

问题

如何同时检查 null 值?

可能的解决方案

我想我可能需要对参数值进行检查,如果是'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') 

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