2013-08-05 47 views
0

计算空值我有两个日期:一个StartDateCreatedDate带有日期

如果我说,如果StartDateNULL

CreatedDate < StartDate 

会发生什么?

我应该使用

isnull(startdate,0) 

还是会只返回一个NULL,否则将永远是小于StartDateStartDateNULL

+1

,当你尝试过什么事?至于你应该做什么,你的商业规则是什么? –

+1

更重要的是,当'StartDate'为'NULL'时会发生什么?你想达到什么目的? –

回答

0

任何普通的比较(>,<,> =,< =,=,<>一样,在)返回null如果它们的参数的至少一个是空;所以CreatedDate <如果StartDate为null,则StartDate返回null。您可以测试空明确:

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

或者你可以至于会发生什么转变起始日期值

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

感谢你,是一个完美的答案,我一直在寻找综合和对点 – LoveToys

0

你必须检查null

如果您没有检查null那么您的比较将会产生unknown这就是false

0

如果同时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