2013-10-01 195 views
2

我有一个连续值的列,但字符串在末尾带有逗号。 如何删除现有值的最后一个逗号?TSQL删除连接字符串中的最后一个逗号

 
SELECT 

    m.Mais_Id 
    , m.Outro 

    (SELECT CAST(emp.First_Name + ' ' + emp.Last_Name + ', ' AS VARCHAR(MAX)) 
    FROM 
     Patos p 
    LEFT JOIN 
     Employee emp 
    ON 
     p.Pato_Id = emp.Pato_Id 
     WHERE 
     m.Pato_Id = p.Pato_Id 
    FOR XML PATH ('') 
    ) AS Names 
FROM  
    Mais m 

我有这样的:

 
Mais_Id Outro Names 
0  As Adn Meas, Fjds Poi, Csa Drop, 
1  Be  
2  Tee As Been, 

这是假装的结果:

 
Mais_Id Outro Names 
0  As Adn Meas, Fjds Poi, Csa Drop 
1  Be  
2  Tee As Been 
+0

看一下[在Microsoft SQL Server 2005中模拟组\ _concat MySQL函数?](http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-microsoft-sql- server-2005),最后一个字符(,)被截断。 – danihp

回答

0

试试这个:

SELECT Mais_id, m.Outro, Substring(newColumn, 0, LEN(newColumn) - 1) 
FROM (

SELECT 

    m.Mais_Id 
    , m.Outro 

    (SELECT CAST(emp.First_Name + ' ' + emp.Last_Name + ', ' AS VARCHAR(MAX)) as newColumn 
    FROM 
     Patos p 
    LEFT JOIN 
     Employee emp 
    ON 
     p.Pato_Id = emp.Pato_Id 
     WHERE 
     m.Pato_Id = p.Pato_Id 
    FOR XML PATH ('') 
    ) AS Names 
FROM  
    Mais m 
) 
1

最简洁的方式来做到这一点是使用stuff()功能:

stuff(
    (
     select ', ' + cast(emp.First_Name + ' ' + emp.Last_Name as varchar(max)) 
     from Patos as p 
      left outer join Employee as emp on p.Pato_Id = emp.Pato_Id 
     where m.Pato_Id = p.Pato_Id 
     for xml path(''), type 
    ).value('.', 'nvarchar(max)') 
, 1, 2, '') as Names 

注意它也更安全得到连接字符串与value()功能,所以如果你有特殊字符,如&或<将正常显示。

相关问题