用日期计算空值

时间:2013-08-05 12:20:55

标签: sql null

我有两个日期:StartDateCreatedDate

如果我说

CreatedDate < StartDate 

如果StartDateNULL会发生什么?

我应该使用

isnull(startdate,0) 

或者它只是返回NULL还是会一直小于StartDate,因为StartDateNULL

3 个答案:

答案 0 :(得分:1)

您必须检查null

如果您不检查null,那么您的比较将导致unknown false

答案 1 :(得分:1)

如果StartDateCreatedDate都可以NULL,您可以使用SQL COALESCE function来提供默认值,例如足够小的日期和足够大的日期:

SELECT ...
FROM ...
WHERE COALESCE(StartDate, DATE '0001-01-01') < COALESCE(CreatedDate, DATE '9999-12-31')

我在这里使用standard SQL date and time literals

注意:日期和时间限制因不同的数据库服务器而异。上面的示例works for the Oracle Database

答案 2 :(得分:1)

任何普通的比较(&gt;,&lt;,&gt; =,&lt; =,=,&lt;&gt;,like,in)如果至少有一个参数为null,则返回null;所以CreatedDate&lt;如果StartDate为null,则StartDate返回null。您可以明确地测试null:

  ((CreatedDate < StartDate) or (StartDate is null))

或者您可以转换StartDate值

  (CreatedDate < NVL(StartDate, To_Date('1.1.1000', 'DD.MM.YYYY')) -- <- Oracle Syntax