我有下面的桌子。
ID StateDate EndDate
1 01/01/2018 01/30/2018
2 02/15/2018 02/01/2018
3 02/01/2018 我需要比较日期,下面的SQL。
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 我怎么能无视诺尔斯?
发布于 2018-04-04 17:48:16
如果endDate为null,则可以分配一个高日期值,条件仍然为真。见下文:
select *
from tablea a
where 1=1
and a.startDate<= coalesce(EndDate,TO_DATE('12/31/9999', 'MM/DD/YYYY') )发布于 2018-04-04 17:46:38
Null不是一个值,而是缺少它。将它与任何期望值的操作符(如<= )一起使用,都将返回null (即“未知”),这不是真,因此该行不会被返回。
您可以使用is操作符显式地检查它:
SELECT *
FROM tablea a
WHERE startDate <= endDate OR (startDate IS NOT NULL AND endDate IS NULL)发布于 2018-04-04 17:46:05
可以将OR关键字添加到where子句中,如下所示:
select *
from table a
where (a.startDate<= EndDate)
OR (a.StartDate is not null and a.EndDate is null)https://stackoverflow.com/questions/49657267
复制相似问题