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