我有两个日期:aStartDate
和 aCreatedDate
如果我说
CreatedDate < StartDate
StartDate
如果是会发生什么NULL
?
我应该使用
isnull(startdate,0)
或者它会只返回 a还是NULL
总是小于StartDate
原样?StartDate
NULL
如果两者都是StartDate
和CreatedDate
can NULL
,您可以使用 SQLCOALESCE
函数提供默认值,例如一个足够小的日期和一个足够大的日期:
SELECT ...
FROM ...
WHERE COALESCE(StartDate, DATE '0001-01-01') < COALESCE(CreatedDate, DATE '9999-12-31')
在这里,我使用标准 SQL 日期和时间文字。
注意:日期和时间限制因不同的数据库服务器而异。上面的示例适用于 Oracle 数据库
任何普通比较(>、<、>=、<=、=、<>、like、in)如果至少有一个参数为 null,则返回 null;因此,如果 StartDate 为 null,则 CreatedDate < StartDate 返回 null。您可以显式测试 null :
((CreatedDate < StartDate) or (StartDate is null))
或者您可以转换 StartDate 值
(CreatedDate < NVL(StartDate, To_Date('1.1.1000', 'DD.MM.YYYY')) -- <- Oracle Syntax
您必须检查null
.
如果您不检查,null
那么您的比较将导致unknown
which is false
。