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 确实有一些行具有 null
的 matched_status
列。我希望这些行成为 'Unmatched' 过滤器的一部分。
即
- 如果参数
(?1)
是'Matched',那么它只会return行
其中 matched_status
= 'Matched'.
- 如果参数
(?1)
为'Unmatched',则只会return行
其中 matched_status
= 'Unmatched' 或 null.
问题
如何同时检查 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
我在使用休眠本机查询的 Java7 应用程序中使用 Postgres 12.6。
我正在尝试构建一个 SQL 语句,该语句从接收一个参数的 table journalheader
中读取结果。参数值可以是 'Matched' 或者 'Unmatched'.
以下解决方案是不够的,因为它不适合 null
值:
select * from journalheader where matched_status = ?1;
table 确实有一些行具有 null
的 matched_status
列。我希望这些行成为 'Unmatched' 过滤器的一部分。
即
- 如果参数
(?1)
是'Matched',那么它只会return行 其中matched_status
= 'Matched'. - 如果参数
(?1)
为'Unmatched',则只会return行 其中matched_status
= 'Unmatched' 或 null.
问题
如何同时检查 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