要查询空字段,我看到了以下答案: 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 =''
答案 0 :(得分:1)
使用COALESCE,您在第一个查询中也将获得 NULL 值。
1-在Postgresql中,您不能混合数据类型example here,但是可以使用函数to_char
来混合值
2-我不明白你的问题
答案 1 :(得分:1)
首先,您需要了解NULL和“空”之间的区别。
NULL是缺少值。任何(或至少几乎任何)数据类型都可以为NULL。当您具有整数类型的列并且不想在该字段中输入值时,您将输入NULL。
“空”是一个字符串/文本概念。这是一个带有空值的字符串,即''
。具有空字符串的文本字段包含一个值:空字符串。它与包含NULL(即没有值)不同。其他数据类型,例如整数,布尔值,json等,不能有空字符串。
现在进入COALESCE。该函数适用于任何数据类型,基本上它返回其参数的第一个非空结果。因此COALESCE(NULL, TRUE)
返回TRUE,因为第一个参数为NULL; COALESCE(FALSE, TRUE)
返回FALSE,因为第一个参数不为NULL。并且COALESCE(NULL, NULL)
返回NULL,因为没有非NULL参数。
因此,COALESCE(field, '')
如果不为NULL,则返回field
的值,否则返回空字符串。当在COALESCE(field, '') = ''
中使用时,当尝试查找field
为“空”的任何行时,这基本上是说“如果field
为NULL,则在其位置使用空字符串,然后查看是否它等于一个空字符串,这是因为NULL和一个空字符串不相等,并且“ you”正在尝试查找字段为NULL或为空的任何行。
在您执行的查询版本中,只需执行field = ''
,将仅返回field
实际上是空字符串而不是field
为NULL的结果。您想要哪种行为取决于您。