如何连接Postgres SELECT中的列?

我有两个string列ab

所以select a,b from foo返回值ab 。 但是, ab连接不起作用。 我试过了 :

 select a || b from foo 

 select a||', '||b from foo 

OP的错误信息(来自评论):

没有操作符匹配给定的名称和参数types。 您可能需要添加明确的types转换。

他还表示,这两个领域是character(2)

无论幕后的实际数据types如何,您都可以通过将text 转换为text来“修复”您的声明。 任何types都可以转换为text

 SELECT a::text || ', ' || b::text AS ab FROM foo; 

如果可能涉及NULL值,可以使用concat_ws()来避免一个或多个NULL参数(Postgres 9.1或更高版本)的NULL结果:

 SELECT concat_ws(', ', a::text, b::text) AS ab FROM foo; 

或者只是concat()如果你不需要分隔符:

 SELECT concat(a::text, b::text) AS ab FROM foo; 

更多细节(以及为什么COALESCE是一个可怜的替代品)在这个相关的答案:

  • 合并两列并添加到一个新的列

关于评论的更新

+不是Postgres(或SQL标准)中string连接的有效运算符。 将这个添加到他们的产品是微软的私人想法。

使用character(n)几乎没有什么好的理由(同义词: char(n) )。 使用textvarchar 。 细节:

  • 使用数据types“文本”存储string的任何缺点?
  • 检查“空值或空值”的最佳方法

无论哪种方式,这个声明只会在现代Postgres中使用任何字符types。 尝试:

 SELECT 'a '::character(2) || 'b '::character(2); 

您必须涉及其他数据types。

问题在于价值中的空洞。 那么级联不能用于空值。 解决scheme如下:

 SELECT coalesce(a, '') || coalesce(b, '') FROM foo; 

在PostgreSQL中使用CONCAT函数来连接是最好的

例如: select CONCAT(first_name,last_name) from person where pid = 136

如果你正在使用column_a || ''|| column_b用于连接2列,如果column_a或column_b中的任何值为null,查询将返回空值。 这在所有情况下可能都不是首选。所以不是这样

||

使用

CONCAT

如果其中任何一方都有价值,它将返回相关价值

CONCAT函数有时不适用于较旧的PostgreSQL版本

看看我用什么解决问题,而不使用CONCAT

  u.first_name || ' ' || u.last_name as user, 

或者也可以使用

  "first_name" || ' ' || "last_name" as user, 

在第二种情况下,我使用双引号first_name和last_name

希望这将是有益的,谢谢

尝试这个

 select textcat(textcat(FirstName,' '),LastName) AS Name from person; 

例如,如果有雇员表,其中包括专栏

雇员号,f_name,l_name,email_id,电话号码n等

如果我们想连接f_name + l_name作为名字。

SELECT employee_number,f_name :: TEXT ||','|| l_name :: TEXT AS“NAME”,email_id,phone_number,指定FROM EMPLOYEE;