PostgreSQL,选择空字符串

时间:2019-02-27 09:27:10

标签: string postgresql

要查询空字段,我看到了以下答案: 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 = '' ;

我的问题是:

  1. COALESCE是否适用于任何数据类型?

  2. 是否有更好的方法来查询空字符串?即column_value =''

2 个答案:

答案 0 :(得分:1)

使用COALESCE,您在第一个查询中也将获得 NULL 值。

1-在P​​ostgresql中,您不能混合数据类型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的结果。您想要哪种行为取决于您。