2

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

where date1 > date2

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

类型是 DATE()

4

4 回答 4

6

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

WHERE '2013-07-18' > NULL

未知数NULL请参阅我关于3 值逻辑中的行为的博客文章。

您将需要使用类似ISNULLaround的函数date2或显式写出逻辑。但是,使用ISNULL将阻止使用索引。你可以写:

WHERE (date1 > date2 OR date2 IS NULL)
于 2013-07-18T15:50:40.530 回答
1

总是未知的。NULL 值必须用 IS NULL 语句处理

试试这个例子:

    declare @d1 datetime
    declare @d2 datetime
    set @d1 = GETDATE()

    select 
    case
        when @d1 > @d2 then 'OK'
        else 'KO'
    end
于 2013-07-18T15:33:10.683 回答
1

任何值,当与 比较相等时NULL,将产生一个值False,即使与 比较时也是NULL如此NULL

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

于 2013-07-18T15:36:49.493 回答
1

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

例如:

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

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

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

其中 Date1 > ISNULL(date2, @defaultvardt)

于 2013-07-18T15:39:10.870 回答