首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres SQL -检查参数是否为null

Postgres SQL -检查参数是否为null
EN

Stack Overflow用户
提问于 2022-05-20 08:02:26
回答 2查看 179关注 0票数 1

我在使用hibernate原生查询的Java7应用程序中使用Postgres 12.6。

我正在尝试构造一个SQL语句,该语句读取表journalheader的结果,其中它接收一个参数。参数值可以是‘匹配的’‘不匹配的’

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

代码语言:javascript
运行
复制
select * from journalheader where matched_status = ?1;

该表确实有一些带有matched_status列的null行。我希望这些行成为‘无与伦比’过滤器的一部分。

如果参数是“匹配”的,则只返回'Matched'.

  • If = 'Unmatched',参数为(?1)的行,然后只返回matched_status =“不匹配”或null的行。

问题

如何也检查null值?

可能的解决方案

我想我可能需要在参数值上添加一个检查,如果它是,‘不匹配’,在语句中包括or matched_status is null。我只是不确定如何检查sql语句中参数的值。

代码语言:javascript
运行
复制
select * from journalheader where matched_status = ?1 or <if ?1 equals 'Unmatched'> matched_status is null;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-20 08:25:25

您可以使用关键字COALESCE

代码语言:javascript
运行
复制
select * from journalheader where COALESCE(matched_status, 'Unmatched') = ?1;

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

票数 1
EN

Stack Overflow用户

发布于 2022-05-20 08:26:54

您可以尝试使用COALESCE

代码语言:javascript
运行
复制
select * 
from journalheader 
where matched_status = COALESCE(?1,'Unmatched') 

CASE WHEN

代码语言:javascript
运行
复制
select * 
from journalheader 
where matched_status =CASE WHEN ?1 is null THEN 'Unmatched' ELSE ?1 END  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72315497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档