首页 > 解决方案 > 如果一个日期为 NULL,则比较日期

问题描述

为什么我从这两个样本中得到不同的结果?

DECLARE @validFrom DATE
DECLARE @validTo DATE

SET @validFrom = GETDATE()
SET @validTo = NULL

IF (@validFrom = @validTo)
   PRINT 'same'
ELSE
   PRINT 'not same'

结果:不一样

但是这段代码不起作用:

DECLARE @validFrom DATE
DECLARE @validTo DATE

SET @validFrom = GETDATE()
SET @validTo = NULL

IF (@validFrom <> @validTo)
    PRINT 'not same'
ELSE
    PRINT 'same'

结果:一样

标签: sql-server

解决方案


不能将 aNULL与常规的等式/不等式运算符进行比较 - 这将始终NULL作为结果返回,这被解释为“未定义”或“假”。这是标准SQL 行为*。

因此检查

IF (@validFrom <> @validTo)

永远假的。

只能NULL使用IS NULLor运算符进行检查IS NOT NULL- 但不能使用=or <>or <or or<=或任何这些标准运算符。

官方文档中的更多详细信息:处理空值


推荐阅读