SQL Server:如何在使用XML路径合并行后删除最后一个逗号

问题描述:

我发现了一种将多行合并为一行的方式,逗号分隔但现在我想删除最后一个逗号。SQL Server:如何在使用XML路径合并行后删除最后一个逗号

CREATE TABLE supportContacts 
(
    id int identity primary key, 
    type varchar(20), 
    details varchar(30) 
); 

INSERT INTO supportContacts (type, details) 
VALUES ('Email', '[email protected]'), 
     ('Twitter', '@sqlfiddle'); 

这个查询相结合的类型,但我想现在删除最后一个逗号:

SELECT top (2) 
    type + ', ' AS 'data()' 
FROM 
    supportContacts 
ORDER BY 
    type DESC 
FOR XML PATH('') 

这是当前结果:

Twitter, Email, 
+0

在紧要关头,你可以使用字符串,删除最后字符;) – okaram 2014-10-30 04:42:56

+0

@okaram将工作,如果我不知道字符串将是多久?你能告诉我一个例子吗? – MattJ 2014-10-30 04:49:16

declare @BigStrRes8K nvarchar(4000) 

SELECT @BigStrRes8K = (SELECT top (2) [type] + ', ' AS 'data()' 
FROM supportContacts 
ORDER BY type DESC 
FOR XML PATH('')) 

SELECT LEFT(RTRIM(@BigStrRes8K), (LEN(RTRIM(@BigStrRes8K))) - 1) as FinalNoComma 

我永远不会做这我在哪里控制渲染代码。我会教导调用者处理尾随逗号。你也需要允许空值和4K或8K限制SQL行

虽然你已经有了一个答案,你会看到另一个常见的成语是:

select stuff((
    SELECT top (2) 
     ', ' type AS 'data()' 
    FROM 
     supportContacts 
    ORDER BY 
     type DESC 
    FOR XML PATH('') 
), 1, 2, '') 

这是说“拿结果的选择并用零长度字符串替换从位置1开始的两个字符“。

+0

我强烈建议使用STUFF,而不是尝试将LTRIM/RTRIM/LEN /等结合起来。 – 2014-10-30 12:27:52

这适用于我 - >

1.Inserting逗号之前数据

2,使用的东西删除它

select (stuff((
    SELECT ', '+ Name AS 'data()' 
    FROM Table_1 
    FOR XML PATH('')), 
    Count('ID') 
, 1, ' '))as Result