假设输入中有3个日期,data1和data2是时间间隔,data3是通用输入日期。 data1和data2可以为null,data3不为null。所以我可以有3种情况:
如果有不同的查询,我不想创建其他内容。我想创建一个处理这些情况的查询。
假设有一个表empolyes(id主键,registration_date),假设我输入了两个Date,那么我该怎么做才能解决我的问题?
答案 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也可以处理这些案例。