在 PostgreSQL 中使用 Select 连接列
PostgreSQL 是一个对象关系数据库系统,这意味着它可以支持比它的竞争者 MySQL
更复杂的数据类型。
今天我们将学习使用 SELECT
操作连接表的列。
在 PostgreSQL 中使用||
连接 VARCHAR
类型的列的运算符
现在,假设我们使用以下配置创建了一个表。
create table tab(
id int not null,
u_name varchar(50) not null,
PRIMARY KEY (u_name)
);
然后我们继续往里面插入一些值。
insert into tab values(45, 'Jonathon'), (56, 'Mark'), (68, 'Angel');
最后,调用 SELECT
中的连接运算符进行显示。
select id || u_name from tab
所以我们会得到如下输出。
输出:
上面的查询是如何工作的?我们使用||
Select
操作中的运算符。
||
运算符在 PostgreSQL 文档中仅定义为连接字符串。
因此,连接其中一列必须是 VARCHAR
数据类型的列并不困难,因为 VARCHAR
对应于 String
。
操纵 SELECT
操作以使用||
当 PostgreSQL 中的列不是字符串时
上面给出的 SELECT
查询的一个非常简单的修改可用于将任何其他数据类型的列连接在一起。
现在让我们假设以下实现。
create table tab(
id int not null,
age int not null,
PRIMARY KEY (id)
);
insert into tab values(45, 21), (56, 22), (68, 23)
现在我们知道两列都是 int
;因此,如果你尝试这样做。
select id || age from tab
它将返回一个错误。
输出:
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.
因此,这里我们有两个选择:
-
在两列之间连接一个 null
STRING
并使其成为有效操作。 - 将类型转换添加到列值之一。
要提供前一个选项,你所要做的就是将查询更改为类似的内容。
select id ||''|| age from tab
这将返回连接所有相邻列的两个数字。它在两个 int
列之间连接一个空字符串;因此,该操作对该运算符有效,因为至少存在一个 String
。
在 PostgreSQL 中使用 Typecast
(::
表示法) 进行连接
要执行此操作,我们可以使用:
select id::text || age from tab
或者
select id|| age::text from tab
此类型将其中一列转换为 Text
类型,使操作再次有效,因为现在存在一个 String
。
在史前 PostgreSQL 中,这种表示法通常用于将有效类型转换为任何其他类型。
在 PostgreSQL 中使用 CAST(expression as type)
表达式
::
符号以更好的对应物 CAST()
结尾。对于只看代码不知道::
做什么的初学者来说,它是有效且更容易理解的。
select CAST(id as varchar(50)) || age from tab
在 PostgreSQL 中使用简单的 CONCAT(col1, col2)
操作
如果你不想进行任何转换,请使你的代码尽可能简单。你可以切换到连接和接受任何给定数据类型的 CONCAT()
函数。
select concat(id, age) from tab
如果 PostgreSQL 中的一列是 NULL
,则使用 COALESCE(variable, to_type)
进行连接
如果变量为 null、0 或其他值,我们使用 COALESCE(variable, to_type)
,以便它保持有效并且不显示 NULL
。
在我们的例子中,将我们的 NULL
列值转换为有效的 String
类型,以便正确连接。
让我们使用以下配置。
create table tab(
id int not null,
age int,
PRIMARY KEY (id)
);
insert into tab values(45, 21), (56, NULL), (68, 23);
我们为表中的第二组值插入了一个 NULL
。
如果我们现在执行此操作。
select id::text || age from tab;
它将返回:
输出:
所以我们可以在这里调用 COALESCE()
。
select coalesce(id, 0)::text || coalesce(age, 0) from tab;
这往往会返回正确的输出,现在将 NULL
值替换为 0。
相关文章
在一个 PostgreSQL 查询中使用多个 WITH 语句
发布时间:2023/03/20 浏览次数:127 分类:PostgreSQL
-
在本教程中,我们将学习如何使用多个 WITH 语句在 PostgreSQL 中使用两个临时表执行查询。
在 Ubuntu 上的 PostgreSQL 中找到配置文件
发布时间:2023/03/20 浏览次数:130 分类:PostgreSQL
-
本文介绍如何在 Ubuntu 上找到 PostgreSQL 数据库的配置文件。
在 PSQL 中运行 SQL 文件
发布时间:2023/03/20 浏览次数:178 分类:数据库
-
本文解释了如何直接从终端/命令行或 psql shell 运行 SQL 文件。为此,你需要指定主机名、端口、用户名和数据库名称。
在 PostgreSQL 中使用循环
发布时间:2023/03/20 浏览次数:124 分类:PostgreSQL
-
在 PL/SQL 中,你可能需要在 Postgres 中使用循环。我们可以使用 FOR 和 WHILE 语句来创建循环。
在 PostgreSQL 中重命名和更改列类型的单个查询
发布时间:2023/03/20 浏览次数:121 分类:PostgreSQL
-
本文介绍如何在 PostgreSQL 中仅使用单个查询来重命名列以及更改其类型。
在 PostgreSQL 中将平均值舍入到小数点后 2 位
发布时间:2023/03/20 浏览次数:186 分类:PostgreSQL
-
本文介绍如何将 PostgreSQL 中的平均值四舍五入到小数点后 2 位。