如何连接Postgres SELECT中的列?
我有两个string列a
和b
。
所以select a,b from foo
返回值a
和b
。 但是, a
和b
连接不起作用。 我试过了 :
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)
text
或varchar
。 细节:
- 使用数据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;