我有两个日期:StartDate
和CreatedDate
如果我说
CreatedDate < StartDate
如果StartDate
为NULL
会发生什么?
我应该使用
isnull(startdate,0)
或者它只是返回NULL
还是会一直小于StartDate
,因为StartDate
是NULL
?
答案 0 :(得分:1)
您必须检查null
。
如果您不检查null
,那么您的比较将导致unknown
false
。
答案 1 :(得分:1)
如果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
答案 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