2013-10-01 197 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()功能,所以如果你有特殊字符,如&或<將正常顯示。

相關問題