比较2个空值日期时间不返回相等

时间:2014-04-17 03:47:37

标签: sql sql-server datetime triggers

在更新触发器中,我正在比较2个可空的日期时间,在我当前的测试中它们都碰巧为空,并且返回它们不相等。

@ExpirationDateChanged = case when i.ExpirationDate = d.ExpirationDate then 0 else 1 end

在这种情况下,i.ExpirationDate和d.Expiration日期为空,但不是得到预期的0,我得到1.

任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:2)

NULL使用相等比较不等于NULL

在ANSI设置(默认值)

下,比较NULL值是否为UNKNOWN

您需要添加额外条件,以使用NULL显式测试IS NULL的两列:

@ExpirationDateChanged = case 
                             when (i.ExpirationDate IS NULL AND d.ExpirationDate IS NULL) OR
                                   i.ExpirationDate = d.ExpirationDate then 0 
                             else 1 
                         end