我正在研究一些与未来日期类似的情景。
我有一张与此类似的表格
ProductID ProductStatus EffectiveFromDate EffectiveToDate CancelledIndicator
----------- ------------- ----------------- --------------- ------------------
345 A 7/7/2016 (null) 1
345 S 7/7/2016 11/7/2016 (null)
345 A 12/7/2016 (null) (null)
我需要获取当前日期的产品 如果我找到取消的指标,则意味着它不再活跃 如果他们是两行一个具有未来日期状态。 根据上面的表格,如果我检查efd< sysdate和etd为null。但要获得当前的活动状态,这是我需要实施的情况。
我需要检查sysdate是否b / w旧记录的efd和etd,如果不是我需要采取最新记录,这将是当前状态。
我有查询这样做
但是当我检查
时会发生什么sysdate between efd and etd where etd can be null most of the time.
答案 0 :(得分:0)
有关如何处理它的一些示例:
<强>设置:强>
SQL> create table testNull (id, startDate, endDate) as
2 (
3 select 1, null, sysdate + 1 from dual union all
4 select 2, sysdate -1, sysdate + 1 from dual union all
5 select 3, sysdate -1, null from dual union all
6 select 4, sysdate -3, sysdate - 1 from dual
7 );
Table created.
不处理NULL:
SQL> select *
2 from testNull
3 where sysdate between startDate and endDate ;
ID STARTDATE ENDDATE
---------- --------- ---------
2 11-LUG-16 13-LUG-16
使用COALESCE :
SQL> select *
2 from testNull
3 where sysdate between startDate and coalesce(endDate, sysdate);
ID STARTDATE ENDDATE
---------- --------- ---------
2 11-LUG-16 13-LUG-16
3 11-LUG-16
使用一些布尔逻辑:
SQL> select *
2 from testNull
3 where sysdate >= startDate
4 and ( endDate is null or sysdate <= endDate);
ID STARTDATE ENDDATE
---------- --------- ---------
2 11-LUG-16 13-LUG-16
3 11-LUG-16