我有以下表。
ID StateDate EndDate
1 01/01/2018 01/30/2018
2 02/15/2018 02/01/2018
3 02/01/2018
我需要比较下面的日期。
select *
from tablea a
where 1=1
and a.startDate<= EndDate
预期结果:
ID StateDate EndDate
1 01/01/2018 01/30/2018
3 02/01/2018
我如何忽略零值?
null不是一个值,而是缺乏值。与任何期望一个值的操作员一起使用它,例如<=
将返回null(即"未知"(,这是不正确的,因此该行不会返回。
您可以与is
操作员明确检查它:
SELECT *
FROM tablea a
WHERE startDate <= endDate OR (startDate IS NOT NULL AND endDate IS NULL)
您可以分配一个高日期值,如果端态为null,那么您的条件仍然是正确的。请参阅下面:
select *
from tablea a
where 1=1
and a.startDate<= coalesce(EndDate,TO_DATE('12/31/9999', 'MM/DD/YYYY') )
您可以将OR
关键字添加到where
子句:
select *
from table a
where (a.startDate<= EndDate)
OR (a.StartDate is not null and a.EndDate is null)
您可以使用以下SQL。
SELECT *
FROM tablea a
WHERE a.endDate is not null
AND a.startDate <= a.endDate
让我知道您是否有疑问!
您可能会尝试以下内容。我认为这是最紧凑的方法:
SELECT * FROM tablea a
WHERE 1 = 1
AND a.startDate <= COALESCE(a.endDate, a.startDate);
如果endDate
的值为null,则COALESCE()
函数将用startDate
的值替换,该值始终与自身相等,因此始终大于或等于自身。
希望这会有所帮助。