如何检查参数是否为空并在查询中将其终止

时间:2018-07-26 08:42:38

标签: sql postgresql jdbc where

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

  1. data3>数据1(data2为空)
  2. data3
  3. data1

如果有不同的查询,我不想创建其他内容。我想创建一个处理这些情况的查询。

假设有一个表empolyes(id主键,registration_date),假设我输入了两个Date,那么我该怎么做才能解决我的问题?

2 个答案:

答案 0 :(得分: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')

我个人认为第一个版本更加清晰

答案 1 :(得分:0)

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

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

编辑:我认为,在处理日期时,必须处理date3等于date1(或分别为date2)的案例,而不是可选的,并且BETWEEN AND也可以处理这些案例。