1

我有两个日期:aStartDate和 aCreatedDate

如果我说

CreatedDate < StartDate 

StartDate如果是会发生什么NULL

我应该使用

isnull(startdate,0) 

或者它会只返回 a还是NULL总是小于StartDate原样?StartDateNULL

4

3 回答 3

1

如果两者都是StartDateCreatedDatecan NULL,您可以使用 SQLCOALESCE函数提供默认值,例如一个足够小的日期和一个足够大的日期:

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

在这里,我使用标准 SQL 日期和时间文字

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

于 2013-08-05T12:36:38.920 回答
1

任何普通比较(>、<、>=、<=、=、<>、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
于 2013-08-05T13:21:46.230 回答
1

您必须检查null.

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

于 2013-08-05T12:22:30.313 回答