【问题标题】:How to convert a recordset to a delimited string in SQL Server如何在 SQL Server 中将记录集转换为分隔字符串
【发布时间】:2011-06-07 22:35:00
【问题描述】:

有没有办法转换单列记录集如

1
2
3

进入 SQL Server 中的“1,2,3”字符串?

【问题讨论】:

标签: sql-server


【解决方案1】:

我已经成功地使用 Coalesce 创建了一个函数,如下所示。然后,您可以在 select 语句中使用该函数来获取分隔字符串。 (您可以在函数中添加参数,并根据需要在 coalesce 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

【讨论】:

  • 这是完美的。感谢您的帮助。
  • 等等,如果我想在与 myTable 不同的表上合并怎么办?您是否要为每个表创建一个函数以节省不必记住合并或 xml 路径? (我更喜欢合并自己,但那是因为我只是经常使用它,xml 路径方法是一种非常合理的方法。)可以创建一个 SP 来执行此操作(多表/多列连接),但即便如此我认为这似乎只是试图隐藏实际发生的事情)
  • (错字,今天脑子里有xmp所以一切都是xmp_path这个和xmp_path那个,更正)
  • Xml 路径有效,但会自动将任何特殊字符转换为其实体引用(例如 & 变为 &),这可能是不可取的。另外,如果需要,您可以在函数中使用相当复杂的 select 语句。是的,您必须为其他表创建一个新函数,因此这也可能不是所有情况下的最佳解决方案。
  • 此外,如果您希望分隔字符串成为输出中的多个列之一,则函数解决方案效果最佳。
【解决方案2】:
select stuff( (select ',' + YourColumn
               from YourTable
               for xml path('')), 1, 1, '')

注意:stuff 函数只是从结果字符串中删除第一个逗号。

【讨论】:

    【解决方案3】:

    COALESCE 是一种不错的方法

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多