将日期与零日期进行比较



我有以下表。

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的值替换,该值始终与自身相等,因此始终大于或等于自身。

希望这会有所帮助。

相关内容

  • 没有找到相关文章