来自Postgresql中SQL Server的'stuff'和'for xml path('')'

use*_*262 5 sql postgresql string-aggregation

我正在将一些SQL Server 2008R2查询迁移到Postgresql 9.0,我遇到了一些问题.这是SQL Server查询:

stuff((select ', '+p.[NAME] as 'data()' 
from BPROVIDERS_PROVIDER p, BORDER_ARTICLEORDERPROVIDER aop 
where p.OID = aop.PROVIDER for xml path('')),1,1,'')) as pNAMES
Run Code Online (Sandbox Code Playgroud)

阅读SQL Server文档我明白这会创建一个以逗号分隔的列表.我认为我可以在Postresql中更改stuff功能overlay.我对么?

第二个问题是SQL Server的for xml path('')作为参数.它返回分配给名为pNAMES而不是create row元素的属性的值.那是对的吗?

Query_to_xml()带属性的Postgresql 函数是否tableforest = 'true'也一样?

谢谢.

Mik*_*son 20

你可以string_agg改用.

SQL小提琴

PostgreSQL 9.1.6架构设置:

create table T
(
  Name varchar(10)
);

insert into T values('Kalle');
insert into T values('Pelle');
insert into T values('Urban');
Run Code Online (Sandbox Code Playgroud)

查询1:

select string_agg(Name, ',') as Names
from T
Run Code Online (Sandbox Code Playgroud)

结果:

|             NAMES |
---------------------
| Kalle,Pelle,Urban |
Run Code Online (Sandbox Code Playgroud)

  • @ user1891262 - 对于您的查询,您不需要.PostgreSQL中的`string_agg`为SQL Server中的`for xml path`做了什么. (2认同)