将日期与空值进行比较

时间:2018-04-04 17:43:12

标签: sql oracle select null

我有下表。

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 

我怎么能忽略空?

6 个答案:

答案 0 :(得分:1)

Null不是一个值,它缺乏价值。将它与任何需要值的运算符一起使用,例如 [80] => Array ( [date] => Carbon\Carbon Object ( [date] => 2018-04-04 17:27:24.000000 [timezone_type] => 3 [timezone] => UTC ) 将返回null(即&#34; unknown&#34;),这不是真的,因此不会返回该行。

您可以使用<=运算符明确检查它:

is

答案 1 :(得分:0)

您可以在OR子句中添加where关键字,例如:

select *
from table a
where (a.startDate<= EndDate) 
OR (a.StartDate is not null and a.EndDate is null)

答案 2 :(得分:0)

如果endDate为null,您可以指定一个高日期值,那么您的条件仍然成立。见下文:

select *
from tablea a
where 1=1
  and a.startDate<= coalesce(EndDate,TO_DATE('12/31/9999', 'MM/DD/YYYY') )

答案 3 :(得分:0)

您可以使用以下SQL。

SELECT *
FROM   tablea a
WHERE a.endDate is not null
AND a.startDate <= a.endDate

如果您有疑问,请告诉我!

答案 4 :(得分:0)

根据您对ŋŷōXmoůŜ的回应,我认为您的startdate不是日期时间数据类型?尝试:

select *
from tablea a
where 1=1
  and cast(a.startDate as date)<= coalesce(cast(EndDate as date),'9999-1-31')

答案 5 :(得分:0)

您可以尝试以下内容。我认为这是最紧凑的方式:

SELECT * FROM tablea a
 WHERE 1 = 1
   AND a.startDate <= COALESCE(a.endDate, a.startDate);

如果endDate的值为NULL,COALESCE()函数将用startDate的值替换它,dlclose的值总是等于它自己,因此总是大于或等于本身。

希望这有帮助。