如何检查参数是不是为空并在查询中检查它
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
我不想使用不同的查询创建不同的 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
包含了界限(>=
和<=
),所以逻辑和OP 要求的不一样。以上是关于如何检查参数是不是为空并在查询中检查它的主要内容,如果未能解决你的问题,请参考以下文章
检查 Spring 数据 JPA 查询中的 List 参数是不是为空