在 PostgreSQL 中使用 Select 连接列

PostgreSQL 是一个对象关系数据库系统,这意味着它可以支持比它的竞争者 MySQL 更复杂的数据类型。

今天我们将学习使用 SELECT 操作连接表的列。

在 PostgreSQL 中使用||连接 VARCHAR 类型的列的运算符

现在,假设我们使用以下配置创建了一个表。

createtabletab(idintnotnull,u_namevarchar(50)notnull,PRIMARYKEY(u_name));

然后我们继续往里面插入一些值。

insertintotabvalues(45,'Jonathon'),(56,'Mark'),(68,'Angel');

最后,调用 SELECT 中的连接运算符进行显示。

selectid||u_namefromtab

所以我们会得到如下输出。

输出:

使用连接运算符连接列

上面的查询是如何工作的?我们使用|| Select 操作中的运算符。

||运算符在 PostgreSQL 文档中仅定义为连接字符串。

因此,连接其中一列必须是 VARCHAR 数据类型的列并不困难,因为 VARCHAR 对应于 String

操纵 SELECT 操作以使用||当 PostgreSQL 中的列不是字符串时

上面给出的 SELECT 查询的一个非常简单的修改可用于将任何其他数据类型的列连接在一起。

现在让我们假设以下实现。

createtabletab(idintnotnull,ageintnotnull,PRIMARYKEY(id));insertintotabvalues(45,21),(56,22),(68,23)

现在我们知道两列都是 int;因此,如果你尝试这样做。

selectid||agefromtab

它将返回一个错误。

输出:

ERROR:  operator does not exist: integer || integer
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

因此,这里我们有两个选择:

  1. 在两列之间连接一个 null STRING 并使其成为有效操作。
  2. 将类型转换添加到列值之一。

要提供前一个选项,你所要做的就是将查询更改为类似的内容。

selectid||''||agefromtab

这将返回连接所有相邻列的两个数字。它在两个 int 列之间连接一个空字符串;因此,该操作对该运算符有效,因为至少存在一个 String

在 PostgreSQL 中使用 Typecast (:: 表示法) 进行连接

要执行此操作,我们可以使用:

selectid::text||agefromtab

或者

selectid||age::textfromtab

此类型将其中一列转换为 Text 类型,使操作再次有效,因为现在存在一个 String

在史前 PostgreSQL 中,这种表示法通常用于将有效类型转换为任何其他类型。

在 PostgreSQL 中使用 CAST(expression as type) 表达式

:: 符号以更好的对应物 CAST() 结尾。对于只看代码不知道::做什么的初学者来说,它是有效且更容易理解的。

selectCAST(idasvarchar(50))||agefromtab

在 PostgreSQL 中使用简单的 CONCAT(col1, col2) 操作

如果你不想进行任何转换,请使你的代码尽可能简单。你可以切换到连接和接受任何给定数据类型的 CONCAT() 函数。

selectconcat(id,age)fromtab

如果 PostgreSQL 中的一列是 NULL,则使用 COALESCE(variable, to_type) 进行连接

如果变量为 null、0 或其他值,我们使用 COALESCE(variable, to_type),以便它保持有效并且不显示 NULL

在我们的例子中,将我们的 NULL 列值转换为有效的 String 类型,以便正确连接。

让我们使用以下配置。

createtabletab(idintnotnull,ageint,PRIMARYKEY(id));insertintotabvalues(45,21),(56,NULL),(68,23);

我们为表中的第二组值插入了一个 NULL

如果我们现在执行此操作。

selectid::text||agefromtab;

它将返回:

输出:

使用 COALESCE

所以我们可以在这里调用 COALESCE()

selectcoalesce(id,0)::text||coalesce(age,0)fromtab;

这往往会返回正确的输出,现在将 NULL 值替换为 0。