要查询空字段,我看到了这个答案: Postgresql, select empty fields
(不幸的是,我没有足够的声望点数来回答@wildplasser 在那个帖子上的问题,所以我们开始吧)
Wildplasser 的回答:
SELECT mystr, mystr1
FROM mytable
WHERE COALESCE(mystr, '') = ''
OR COALESCE(mystr1, '') = ''
;
我不确定我得到了 COALESCE 方法,但它也适用于我这种方式(特定于我的字符串数据类型):
SELECT mystr, mystr1
FROM mytable
WHERE mystr = '' ;
我的问题是:
COALESCE 是否适用于任何数据类型?
有没有更好的查询空字符串的方法?即,column_value = ' '
最佳答案
首先您需要了解 NULL 和“空”之间的区别。
NULL 是没有值。任何(或至少几乎任何)数据类型都可以为 NULL。当您有一个整数类型的列,并且您不想在该字段中放置一个值时,您可以放置 NULL。
“空”是一个字符串/文本概念。它是一个具有空值的字符串,即 ''
。具有空字符串的文本字段包含一个值:空字符串。它不同于包含 NULL,即没有值。其他数据类型,例如整数、 bool 值、json 等等,不能有空字符串。
现在合并。该函数适用于任何数据类型,基本上它返回其参数的第一个非 NULL 结果。所以 COALESCE(NULL, TRUE)
返回 TRUE,因为第一个参数是 NULL; COALESCE(FALSE, TRUE)
返回 FALSE,因为第一个参数不是 NULL;并且 COALESCE(NULL, NULL)
返回 NULL,因为没有非 NULL 参数。
因此,COALESCE(field, '')
返回 field
的值(如果它不为 NULL),否则返回空字符串。当在 COALESCE(field, '') = ''
中尝试查找 field
为“空”的任何行时,这基本上是在说“if field
为 NULL 然后在其位置使用空字符串,然后查看它是否等于空字符串”。这是因为 NULL 和空字符串不等价,并且“您”正在尝试查找字段为 NULL 或空的任何行。
在您的查询版本中,您只需执行 field = ''
,它只会返回 field
实际上是空字符串的结果,而不是 field
为 NULL。您想要哪种行为取决于您。
关于string - postgresql,选择空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54902037/