我有下表。
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
我怎么能忽略空?
答案 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
的值总是等于它自己,因此总是大于或等于本身。
希望这有帮助。