Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我在SQL Server中有一个比较两个日期的查询,那么如果其中一个日期为空会发生什么情况?_Sql_Sql Server - Fatal编程技术网

如果我在SQL Server中有一个比较两个日期的查询,那么如果其中一个日期为空会发生什么情况?

如果我在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子句的查询,如:

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),它会咬到您;)