计算空值我有两个日期:一个StartDate
和CreatedDate
带有日期
如果我说,如果StartDate
是NULL
CreatedDate < StartDate
会发生什么?
我应该使用
isnull(startdate,0)
还是会只返回一个NULL
,否则将永远是小于StartDate
为StartDate
是NULL
?
计算空值我有两个日期:一个StartDate
和CreatedDate
带有日期
如果我说,如果StartDate
是NULL
CreatedDate < StartDate
会发生什么?
我应该使用
isnull(startdate,0)
还是会只返回一个NULL
,否则将永远是小于StartDate
为StartDate
是NULL
?
任何普通的比较(>,<,> =,< =,=,<>一样,在)返回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
感谢你,是一个完美的答案,我一直在寻找综合和对点 – LoveToys
你必须检查null
。
如果您没有检查null
那么您的比较将会产生unknown
这就是false
。
如果同时StartDate
和CreatedDate
可以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
,当你尝试过什么事?至于你应该做什么,你的商业规则是什么? –
更重要的是,当'StartDate'为'NULL'时会发生什么?你想达到什么目的? –