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

时间:2013-07-18 15:30:23

标签: sql sql-server

如果我的查询具有WHERE子句,如:

where date1 > date2

如果date2为null,会发生什么?我是否需要指定date1和date2都不为空?

类型是DATE()

4 个答案:

答案 0 :(得分:6)

它会尝试将date1NULL进行比较,并将评估为未知。

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的值,即使将NULLNULL进行比较也是如此。

您可以使用IS NULL运算符检查NULL的值。

答案 3 :(得分:1)

在可以为空的日期使用ISNULL并将其替换为默认日期或其他字段。

例如:

Date1> ISNULL(date2,'1900-01-01')。

更好的是,用默认参数替换硬编码。

声明@defaultvardt DATE ='1900-01-01'

Date1> ISNULL(date2,@ defaultvard)