'stuff' and 'for xml path('')' from SQL Server in Postgresql

ぃ、小莉子 提交于 2019-12-23 10:55:01

问题


I'm migrating some SQL Server 2008R2 queries to Postgresql 9.0 and I have some trouble with it. Here's the SQL Server query:

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

Reading SQL Server documentation I understand that this creates a comma separated list. I think that I can change stuff function to overlay function in Postresql'. Am I correct?

The second problem comes with SQL Server's for xml path with ('') as a parameter. It returns the values assigned to an attribute called pNAMES instead of create row elements. Is that correct?

Does Postgresql Query_to_xml() function with attribute tableforest = 'true' do the same?

Thank you.


回答1:


You can use string_agg instead.

SQL Fiddle

PostgreSQL 9.1.6 Schema Setup:

create table T
(
  Name varchar(10)
);

insert into T values('Kalle');
insert into T values('Pelle');
insert into T values('Urban');

Query 1:

select string_agg(Name, ',') as Names
from T

Results:

|             NAMES |
---------------------
| Kalle,Pelle,Urban |



回答2:


You can replace it by String_agg for example SQL Server stored procedure:

STUFF((SELECT DISTINCT ', ' + CONVERT(VARCHAR,L.ROLE_SUB_CAT_ID) 
       FROM [PHS].[dbo].PHS_ADMIN_USER_ACCESS_DTL K,
            [PHS].[dbo].[PHS_ADMIN_USER_ROLE_SUB_CAT_MST] L
       WHERE L.ROLE_SUB_CAT_ID = K.ROLE_SUB_CAT_ID 
         AND K.UMC_ID = A.UMC_ID 
         AND K.CCR_ID = A.CCR_ID
       FOR XML PATH('')), 1, 1, '') AS ROLE_SUB_CAT_ID

Convert it to postgresql like this:

string_agg((SELECT distinct ', ' ||  cast(L.ROLE_SUB_CAT_ID as VARCHAR) FROM PHS.dbo.PHS_ADMIN_USER_ACCESS_DTL K,
          PHS.dbo.PHS_ADMIN_USER_ROLE_SUB_CAT_MST L
          WHERE L.ROLE_SUB_CAT_ID = K.ROLE_SUB_CAT_ID AND K.UMC_ID = A.UMC_ID AND K.CCR_ID=A.CCR_ID
          ), 1, 1, '') AS ROLE_SUB_CAT_ID


来源:https://stackoverflow.com/questions/14119517/stuff-and-for-xml-path-from-sql-server-in-postgresql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!