gpt4 book ai didi

postgresql - 在 Postgresql 中,Case When VS CASE columnname WHEN 之间有什么区别

转载 作者:行者123 更新时间:2023-11-29 14:09:38 29 4
gpt4 key购买 nike

随着查询

SELECT id, name
, CASE name WHEN NULL THEN FALSE ELSE TRUE END as name_constraint1
, CASE WHEN name IS NULL THEN FALSE ELSE TRUE END as name_constraint2
FROM table

我得到的结果是

id   | name  | name_constraint1 | name_constraint2
---- | ----- |---------------- | ----------------
1 | a |t | t
2 | b |t | t
3 | |t | f

我的问题是为什么 CASE name WHEN NULL THEN FALSE 无法计算出 name 列中的 NULL 值,而 CASE WHEN name IS NULL THEN FALSE 工作正常?

最佳答案

CASE 的“简单”变体表达式等同于普通比较(相等)。

因此

案例名称 WHEN NULL THEN FALSE ...

相当于

CASE WHEN name = NULL THEN FALSE ...

您可能知道,这不是测试空值的正确方法,它与(正确的)方法不同:

CASE WHEN NAME IS NULL THEN FALSE ...

准确地说,一般(更冗长,“非简单”)形式的优点是它允许测试任意表达式,用于每种情况的替代(可能完全不同)。简单形式只接受要与值列表进行比较的单个表达式。在这种情况下,您必须使用一般形式。

顺便说一句,对于这种特殊用途(用某个预定值替换 NULL 值),最好使用标准 COALESCE功能,正是这样做的。

关于postgresql - 在 Postgresql 中,Case When VS CASE columnname WHEN 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44722289/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com