如何检查参数是不是为空并在查询中检查它

Posted

技术标签:

【中文标题】如何检查参数是不是为空并在查询中检查它【英文标题】:how check if parameter are null and ckecks it in the query如何检查参数是否为空并在查询中检查它 【发布时间】:2019-01-03 04:48:03 【问题描述】:

假设输入有 3 个日期,data1 和 data2 是间隔,data3 是通用输入日期。 data1 和 data2 可以为空,data3 不为空。所以我可以有 3 种情况:

    data3 > data1(data2为空) data3 数据1

我不想使用不同的查询创建不同的 if。我想创建一个处理这些情况的查询。

假设有一个表 empolyes(id primary key, registration_date),假设我有两个 Dates 输入,我必须如何解决我的问题?

【问题讨论】:

嗨,我们需要更多信息:1)添加一些代码,向我们展示您对 java 做了什么 2)哪个 db 是? 分享示例表及其预期输出 【参考方案1】:

你可以明确地写这个:

where (data3 > date1 or date1 is null) and
      (date3 < date2 or date2 is null)

你也可以使用某种形式的coalesce(),比如:

where date3 > coalesce(date1, date3 - interval '1 day') and
      date3 < coalesce(date2, date3 + interval '1 day')

我个人觉得第一个版本更清晰。

【讨论】:

【参考方案2】:

我建议在 where 子句中使用以下代码行:

(...) NVL(data1, data3) AND NVL(data2, data3) 之间的 data3

编辑:我相信,在处理日期时,处理 date3 等于 date1(或 date2,分别)的情况是强制性的,而不是可选的,并且 BETWEEN AND 也处理这些情况。

【讨论】:

这是一个合理的建议,但是between 包含了界限(&gt;=&lt;=),所以逻辑和OP 要求的不一样。

以上是关于如何检查参数是不是为空并在查询中检查它的主要内容,如果未能解决你的问题,请参考以下文章

JPA检查是不是为空查询

检查 Spring 数据 JPA 查询中的 List 参数是不是为空

如果不是 Null,则检查输入参数并在 SQL Server 的 where 中使用它

sql 语句查询判断是不是为空并关联

如何在修剪tfidfvectorizer后检查术语是否为空

如何使用连接表检查房间查询中的空参数?