Ale*_*lex 3 sql-server sql-server-2016
我一直在玩 CASE 语法,并注意到以下我不完全理解的行为差异。
鉴于以下查询
DECLARE @Value1 INT
SELECT
'Col1' = CASE WHEN @Value1 IS NULL THEN 'Yay'
ELSE 'Oh'
END
,'Col2' = CASE @Value1 WHEN NULL THEN 'Yay'
ELSE 'Oh'
END
,'Val' = @Value1
Run Code Online (Sandbox Code Playgroud)
我得到的结果集是这样的:
列 1 | Col2 | 瓦尔
耶 | 哦| 空值
我原以为他们会返回相同的结果。有人会很乐意解释这里发生了什么吗?
出于同样的原因,我在下面添加的 Col3 返回“哦”。在您的 Col2 中,您正在测试 NULL 是否等于 @Value1。NULL 是未定义的,它不等于任何东西。正如科德所说
规则 3:系统处理空值:
DBMS 必须允许每个字段保持为空(或为空)。具体来说,它必须支持系统的、不同于所有常规值(例如,在数值的情况下,“不同于零或任何其他数字”)并且独立于数据的“缺失信息和不适用信息”的表示类型。这还暗示 DBMS 必须以系统的方式处理此类表示。
DECLARE @Value1 INT
SELECT
'Col1' = CASE WHEN @Value1 IS NULL THEN 'Yay'
ELSE 'Oh'
END
,'Col2' = CASE @Value1 WHEN NULL THEN 'Yay'
ELSE 'Oh'
END
,'Col3' = CASE WHEN NULL = NULL THEN 'Yay'
ELSE 'Oh'
END
,'Val' = @Value1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120 次 |
最近记录: |