当DATETIME值为NULL时,我很困惑为什么这两个CASE语句提供不同的答案。
DECLARE @MyDate DATETIME = NULL;
SELECT CASE ISNULL(@MyDate, 0)
WHEN 0 THEN 'It Is Null'
ELSE 'It Is a Date'
END;
这导致值'It Is Null',这很简单 - 将NULL值变为0,然后我们测试0.但是:
DECLARE @MyDate DATETIME = NULL;
SELECT CASE @MyDate
WHEN NULL THEN 'It Is Null'
ELSE 'It Is a Date'
END;
以上结果是'这是一个约会',这是我的困惑点。该条款不接受“WHEN IS NULL”,这是我首先想到的问题。
为什么CASE WHEN不会识别NULL值?
答案 0 :(得分:0)
您正在使用的案例表达式语法是将您在case
部分中提供的值与提供的每个值和when
部分进行比较(并在找到匹配后停止)。
所以你在该陈述中实际要求的是@Date = NULL
- 总是评估为假。
你可以这样写:
SELECT CASE WHEN @MyDate IS NULL
THEN 'It Is Null'
ELSE 'It Is a date'
END
答案 1 :(得分:0)
答案 2 :(得分:0)
我不确定您使用的是哪种RDBMS,但在T-SQL中,正确的(以及符合ANSI标准的)整体方式是:
DECLARE @MyDate DATETIME = NULL;
SELECT
CASE
WHEN @MyDate IS NULL
THEN 'It Is Null'
ELSE 'It Is a Date'
END;
答案 3 :(得分:0)
我最近做过的观察:人们对CASE
表达式感到困惑,而使用UNION
的等效构造很容易编写和理解(并且似乎更直观地处理空值! )例如
DECLARE @MyDate DATETIME = NULL;
SELECT 'It Is Null'
WHERE @MyDate IS NULL
UNION
SELECT 'It Is a Date'
WHERE @MyDate IS NOT NULL;