Where Criteria on 空场

Where Criteria on empty field

假设我有一个具有以下值的 table 计划。

planName(VARCHAR2) | validFrom(timestamp) | validTo(timestamp)
---------------------------------------------------------------
planA              |         20-10-2013   |

我应该在 'validTo' 字段上使用 where 条件编写什么 select 查询,以便即使 'validTo'

中的值为空也能获取该行

例如,如果我这样写查询:-

select * 
from plan 
where validFrom > to_Date('20-10-2013', 'DD-MM,YYYY') 
  and validTo < to_Date('31-12-2029', 'DD-MM,YYYY')

并获得类似

的结果
planName(VARCHAR2) | validFrom(timestamp) | validTo(timestamp)
---------------------------------------------------------------
                   |                      |

但我还需要获取该行。

你只需要在 WHERE 子句中添加 ValidTo IS NULL

SELECT * 
FROM plan 
WHERE (validFrom > to_Date('20-10-2013', 'DD-MM,YYYY')) 
      AND (validTo < to_Date('31-12-2029', 'DD-MM,YYYY') OR validTo IS NULL)

这会起作用,

select * 
from plan 
where 
validFrom > to_Date('20-10-2013', 'DD-MM,YYYY') 
  and 
(validTo < to_Date('31-12-2029', 'DD-MM,YYYY') or validTo is null)

感谢每一个我得到的方法,希望这也能支持其他人。

select * from plan where COALESCE(validFrom , to_date('12/10/2799', 'DD/MM/YYYY')) > to_Date('20/10/2013', 'DD/MM/YYYY') AND COALESCE(validFrom , to_date('1/01/1700', 'DD/MM/YYYY'))< to_Date('31/12/2029', 'DD/MM/YYYY'); 

如果值为空,COALESCE() 将与下一个非空值进行比较。

COALESCE 是 NVL 的替代方法。