如何将记录转换为SQL Server中

问题描述:

分隔字符串有没有办法转换一列记录集如如何将记录转换为SQL Server中

1 
2 
3 

为“1,2,3”在SQL Server中的字符串?

+0

我知道我可以使用游标要做到这一点,但我想知道是否有不同的方式。 – 2011-01-12 16:03:16

+0

这是否必须在sql级别完成,或者您是否可以通过编程方式在消费端处理此问题? – RQDQ 2011-01-12 16:06:35

我已经成功创建一个函数使用像下面这样的Coalesce来做到这一点。然后,您可以在您的select语句中使用该函数来获取分隔字符串。 (您可以将参数添加到您的函数,并根据需要在聚结SELECT语句中使用它们。)

CREATE FUNCTION [dbo].[fn_MyFunction] 
(
) 
RETURNS NVARCHAR(MAX) 
AS 
BEGIN 

    DECLARE @str NVARCHAR(MAX) 

    DECLARE @Delimiter CHAR(2) 
    SET @Delimiter = ', ' 

    SELECT @str = COALESCE(@str + @Delimiter,'') + AColumn 
    FROM dbo.myTable 

    RETURN RTRIM(LTRIM(@str)) 

END 

COALESCE是要做到这一点

http://msdn.microsoft.com/en-us/library/ms190349.aspx

DECLARE @Out VARCHAR(2048) 
Select @Out = COALESCE(@Out + ', ', '') + [YourColumn] from YourTable 

print @Out 

select stuff((select ',' + YourColumn 
       from YourTable 
       for xml path('')), 1, 1, '') 

注意体面的方式:STUFF函数只是删除从结果字符串中的第一个逗号。