Ale*_*lex 133 sql postgresql types concatenation coalesce
我有两个字符串列a和b一个表foo.
select a, b from foo返回值a和b.但是,串联a和b不起作用.我试过了 :
select a || b from foo
Run Code Online (Sandbox Code Playgroud)
和
select a||', '||b from foo
Run Code Online (Sandbox Code Playgroud)
从评论更新:两列都是类型character(2).
Erw*_*ter 235
对于字符串类型列character(2)(如稍后所述),显示的串联正常工作,因为引用手册:
[...]字符串连接operator(
||)接受非字符串输入,只要至少有一个输入是字符串类型,如表9.8所示 .对于其他情况,插入明确的强制text[...]
大胆强调我的.第二个示例(select a||', '||b from foo)适用于任何数据类型,因为无类型字符串文字', '默认为类型,text使得整个表达式在任何情况下都有效.
对于非字符串数据类型,您可以通过强制转换至少一个参数来"修复"第一个语句text.(任何类型都可以转换为text):
SELECT a::text || b AS ab FROM foo;
Run Code Online (Sandbox Code Playgroud)
从你自己的答案来看," 不起作用 "应该是指" 返回NULL ".任何连接到NULL 的结果都是NULL.如果可以涉及NULL值且结果不为NULL,则使用concat_ws()连接任意数量的值(Postgres 9.1或更高版本):
SELECT concat_ws(', ', a, b) AS ab FROM foo;
Run Code Online (Sandbox Code Playgroud)
或者,concat()如果您不需要分隔符:
SELECT concat(a, b) AS ab FROM foo;
Run Code Online (Sandbox Code Playgroud)
这里不需要类型转换,因为这两个函数都接受"any"输入并使用文本表示.
COALESCE在这个相关答案中有更多细节(以及为什么是一个糟糕的替代品):
+在Postgres(或SQL标准)中不是字符串连接的有效运算符.微软的私人想法是将其添加到他们的产品中.
几乎没有任何理由可以使用(同义词:) character(n).使用char(n)text或varchar.细节:
Ale*_*lex 29
问题在于值中的空值; 然后连接不适用于空值.解决方案如下:
SELECT coalesce(a, '') || coalesce(b, '') FROM foo;
Run Code Online (Sandbox Code Playgroud)
小智 17
最好在PostgreSQL中使用CONCAT函数进行连接
例如: select CONCAT(first_name,last_name) from person where pid = 136
如果你使用column_a || ''|| column_b用于连接2列,如果column_a或column_b中的任何值为null,则查询将返回null值.在所有情况下都可能不是首选..所以不要这样做
||
使用
CONCAT
如果它们中的任何一个有价值,它将返回相关值
CONCAT函数有时不适用于旧版本的postgreSQL
看看我不使用CONCAT来解决问题的方法
u.first_name || ' ' || u.last_name as user,
Run Code Online (Sandbox Code Playgroud)
或者你也可以使用
"first_name" || ' ' || "last_name" as user,
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我对first_name和last_name使用双引号
希望这会有用,谢谢
因为我也被困在这个问题上,所以我想我应该分享最适合我的解决方案。我也认为这要简单得多。
如果您使用大写的表名。
SELECT CONCAT("firstName", ' ', "lastName") FROM "User"
Run Code Online (Sandbox Code Playgroud)
如果使用小写表名
SELECT CONCAT(firstName, ' ', lastName) FROM user
Run Code Online (Sandbox Code Playgroud)
就是这样!。由于 PGSQL 计算列声明的双引号和字符串的单引号,这就像一个魅力。
| 归档时间: |
|
| 查看次数: |
232347 次 |
| 最近记录: |