string - postgresql,选择空字符串

标签 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 = ' '

最佳答案

首先您需要了解 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/

相关文章:

c++ - 在 C++ 中使用 C 字符串解析 URL

c++ - 在c++中使用哪个字符串类可以实现高性能并且简单

java - 用java中的属性文件的值替换String

python - 如何删除列表中的多个字符?

node.js - 哪些 NodeJS 框架支持关系数据库?

python - 获取给定位置周围的单词

sql - 如何从两个不同的表中查询 JSON 数组?

postgresql - 错误 : extra data after last expected column - COPY

SQL:选择具有条件优先级的随机行

ruby-on-rails - 如何通过共享应用程序和数据库的多家公司保护 Rails 应用程序