首页 > 解决方案 > 在 Postgres 中也将三列数据连接成一列,其中包含单列值

问题描述

谁能告诉我哪个命令用于将三列数据连接到 PostgreSQL 数据库中的一列?

例如,如果列是

begin | Month | Year
   12 |     1 | 1988
   13 |     3 | 
   14 |       | 2000
      |     5 | 2012

输出:

Result
12-1-1988 
13-3-null
14-null-2000
null-5-2012

实际上,我已经连接了两列,但它只显示结果中的那些值,这些值在所有列中都不为空,但我想显示在单列中也不为空的值。

标签: postgresqlstring-concatenation

解决方案


如果您只是使用标准的连接函数,如concat()or||运算符,那么null当任何元素为null.

您可以使用concat_ws()忽略null值的函数。但是您期望它们会被显示。

因此,您需要将实际null值转换为非空文本'null'。这可以使用COALESCE()函数来完成,该函数接受多个参数并返回第一个非空值。但是这里出现了问题,该'null'字符串是text与列 ( ) 不同的类型 ( int)。所以你必须均衡类型,例如通过将int值转换为text之前。因此,最后您的查询可能如下所示:

点击:demo:db<>fiddle

SELECT
    concat_ws('-',
        COALESCE(begin::text, 'null'), 
        COALESCE(month::text, 'null'), 
        COALESCE(year::text, 'null')
    )
FROM mytable

推荐阅读