如果我在SQL Server中有一个比较两个日期的查询,那么如果其中一个日期为空会发生什么情况?
如果我有一个包含WHERE子句的查询,如:如果我在SQL Server中有一个比较两个日期的查询,那么如果其中一个日期为空会发生什么情况?,sql,sql-server,Sql,Sql Server,如果我有一个包含WHERE子句的查询,如: where date1 > date2 如果date2为空会发生什么?我是否需要指定date1和date2都不为null 类型为DATE()始终未知。NULL值必须用IS NULL语句处理 试试这个例子: declare @d1 datetime declare @d2 datetime set @d1 = GETDATE() select case when @d1 > @d2
where date1 > date2
如果date2为空会发生什么?我是否需要指定date1和date2都不为null
类型为DATE()始终未知。NULL值必须用IS NULL语句处理 试试这个例子:
declare @d1 datetime
declare @d2 datetime
set @d1 = GETDATE()
select
case
when @d1 > @d2 then 'OK'
else 'KO'
end
将任何值与
NULL
进行相等性比较时,即使将NULL
与NULL
进行比较,也会产生False
的值
您可以使用
IS NULL
运算符检查NULL
的值,或者在可空日期使用ISNULL并用默认日期或其他字段替换它
例如:
其中Date1>ISNULL(date2,'1900-01-01')
更好的是,用默认参数替换硬代码
声明@defaultvardt日期='1900-01-01'
其中Date1>ISNULL(date2,@defaultvardt)它将尝试将
Date1
与NULL
进行比较,并计算为未知
WHERE '2013-07-18' > NULL
这是未知的。请参阅我的博客文章
您需要在date2
周围使用类似于ISNULL
的函数,或者显式写出逻辑。但是,使用ISNULL
将阻止使用索引。你可以写:
WHERE (date1 > date2 OR date2 IS NULL)
有关NULLs行为的详细信息,请参见:。顺便说一下,您可以从请求中排除date1/date2,其中的值为NULL。可能的重复值有点挑剔,但比较结果不是假的。它是空的(可以认为是未知的)。在本例中没有区别,因为它不是真的,但如果假设x=NULL为false-correct(false->unknown),它会咬到您;)