如何检查参数是否为空并在查询中检查它
how check if parameter are null and ckecks it in the query
假设输入3个日期,data1和data2为区间,data3为通用输入日期。 data1 和data2 可以为null,data3 不能为null。所以我可以有 3 种情况 :
- data3 > data1(data2 为空)
- data3 < data2(data1 为空)
- 数据 1 < 数据 3 < 数据 2
我不想使用不同的查询创建不同的 if。我想创建一个查询来处理这些情况。
假设有一个table empolyes(id primary key, registration_date),假设我输入了两个日期,我必须如何解决我的问题?
我建议在 where 子句中使用以下代码行:
(...) NVL(data1, data3) 和 NVL(data2, data3) 之间的数据 3
编辑:我相信,在处理日期时,处理 date3 等于 date1(或分别为 date2)的情况是强制性的,而不是可选的,并且 BETWEEN AND 也处理这些情况。
你可以明确地这样写:
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')
个人觉得第一个版本更清晰。
假设输入3个日期,data1和data2为区间,data3为通用输入日期。 data1 和data2 可以为null,data3 不能为null。所以我可以有 3 种情况 :
- data3 > data1(data2 为空)
- data3 < data2(data1 为空)
- 数据 1 < 数据 3 < 数据 2
我不想使用不同的查询创建不同的 if。我想创建一个查询来处理这些情况。
假设有一个table empolyes(id primary key, registration_date),假设我输入了两个日期,我必须如何解决我的问题?
我建议在 where 子句中使用以下代码行:
(...) NVL(data1, data3) 和 NVL(data2, data3) 之间的数据 3
编辑:我相信,在处理日期时,处理 date3 等于 date1(或分别为 date2)的情况是强制性的,而不是可选的,并且 BETWEEN AND 也处理这些情况。
你可以明确地这样写:
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')
个人觉得第一个版本更清晰。