如果我的查询具有WHERE子句,如:
where date1 > date2
如果date2为null,会发生什么?我是否需要指定date1和date2都不为空?
类型是DATE()
答案 0 :(得分:6)
它会尝试将date1
与NULL
进行比较,并将评估为未知。
WHERE '2013-07-18' > NULL
是未知。请参阅NULL
behavior in 3 valued logic上的博文。
您需要在ISNULL
周围使用date2
之类的函数或明确写出逻辑。但是,使用ISNULL
将阻止使用索引。你可以写:
WHERE (date1 > date2 OR date2 IS NULL)
答案 1 :(得分:1)
总是未知。必须使用IS NULL语句
处理NULL值试试这个例子:
declare @d1 datetime
declare @d2 datetime
set @d1 = GETDATE()
select
case
when @d1 > @d2 then 'OK'
else 'KO'
end
答案 2 :(得分:1)
与NULL
相等时,任何值都会产生False
的值,即使将NULL
与NULL
进行比较也是如此。
您可以使用IS NULL
运算符检查NULL
的值。
答案 3 :(得分:1)
在可以为空的日期使用ISNULL并将其替换为默认日期或其他字段。
例如:
Date1> ISNULL(date2,'1900-01-01')。
更好的是,用默认参数替换硬编码。
声明@defaultvardt DATE ='1900-01-01'
Date1> ISNULL(date2,@ defaultvard)