PostgreSQL 中的 ORACLE wm_concat 等效项
Posted
技术标签:
【中文标题】PostgreSQL 中的 ORACLE wm_concat 等效项【英文标题】:ORACLE wm_concat equivalent in PostgreSQL 【发布时间】:2013-01-28 16:41:36 【问题描述】:我是 PostgreSQL 新手,在将数据库从 Oracle 迁移到 PostgreSQL 9.2 时遇到问题。我必须在我的代码中更改一些本机查询。我有一个像这样的子查询:
SELECT wm_concat(p.first_name || ' ' || p.last_name)
FROM TODO_PERSON PR
JOIN PERSON P ON (p.id == pr.person_id)
WHERE todo_id = internal_table.id
在 PostgreSQL 中我找不到等效的功能或其他解决方案...
【问题讨论】:
您确定您的代码在 Oracle 中有效吗? 【参考方案1】:PostgreSQL 有一堆可用的aggregation functions。
wm_concat
等效项似乎是 string_agg
,但您必须指定分隔符。请查看文档以了解详细信息。
【讨论】:
【参考方案2】:这只是简单的连接。您可以使用 CONCAT 函数或仅使用管道编写查询;
所以第一个解决方案是:
SELECT CONCAT(p.first_name, ' ', p.last_name) [...]
或:
SELECT p.first_name || ' ' || p.last_name [...]
如果您想在结果中添加逗号,只需添加逗号而不是间隙,作为列名之间的字符串。即:
SELECT CONCAT(p.first_name, ', ', p.last_name) [...]
查询的最后一部分非常神秘。你用这些括号做什么?
【讨论】:
wm_concat
is an undocumented aggregate function in Oracle.
wm_concat 是一个聚合函数 - 这个答案与最初询问的内容无关。以上是关于PostgreSQL 中的 ORACLE wm_concat 等效项的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 和 PostgreSQL 中的 Write Skew 异常不回滚事务
使用 JDBC 时,Oracle 的 REF CURSOR 在 Postgresql 中的等价物是啥?
PostgreSQL兼容性之oracle的rowid(APP)
如何为 oracle 中的每个线程选择和阻止行?(PostgreSQL 有一个工作示例)