【问题标题】:TSQL XML Comma delimited listTSQL XML 逗号分隔列表
【发布时间】:2015-09-05 20:12:13
【问题描述】:

我正在尝试获取逗号分隔的字段。该结构看起来与下面的非常相似。我想为下面的所有节点获取一个逗号分隔的列表。

DECLARE @Test XML = '

    <Order id="orderId">
      <Products>
        <Product>1</Product>
        <Product>2</Product>
        <Product>3</Product>
        <Product>4</Product>
        <Product>5</Product>
      </Products>
      <Address street="1234 City World" zip="12345" city="City" state="FL"></Address>
</Order>'

SELECT 
  @Test.value('(/Order/@id)[1]', 'NVARCHAR(1000)') AS OrderId,
  @Test.value('(/Order/Address/@street)[1]', 'NVARCHAR(1000)') AS Street,
  @Test.value('(/Order/Address/@city)[1]', 'NVARCHAR(1000)') AS City,
  @Test.value('(/Order/Address/@state)[1]', 'NVARCHAR(1000)') AS State,
  @Test.value('(/Order/Address/@zip)[1]', 'NVARCHAR(1000)') AS Zip,
  @Test.query('Order/Products/Product/text()') AS prods 

我得到了那些:

OrderId 的“orderid” 《1234城市世界》街拍 “城市”为城市 “FL”代表州 “1245”代表邮编。 “12345”代表产品。

我想获得“1,2,3,4,5”作为产品。

谢谢,

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    通过使用它,我能够达到您期望的结果:

    SELECT  @Test.value('(/Order/@id)[1]', 'NVARCHAR(1000)') AS OrderId ,
            @Test.value('(/Order/Address/@street)[1]', 'NVARCHAR(1000)') AS Street ,
            @Test.value('(/Order/Address/@city)[1]', 'NVARCHAR(1000)') AS City ,
            @Test.value('(/Order/Address/@state)[1]', 'NVARCHAR(1000)') AS State ,
            @Test.value('(/Order/Address/@zip)[1]', 'NVARCHAR(1000)') AS Zip ,
            ( SELECT    
                STUFF(( SELECT  ',' + Prods.Prod.value('text()[1]','varchar(max)')
                        FROM    @Test.nodes('/Order/Products/Product') AS Prods ( Prod )
                        FOR XML PATH('')
                ), 1, 1, '')
            ) prods
    

    这有点令人困惑,但我要做的是选择 Products 节点并将其转换为 Products 的“表”,然后我使用 FOR XMLSTUFF 将它们连接到同一行。

    STUFF 功能不适用于旧版本的 SQL Server,因此您可能需要调整此解决方案,如果需要,您可以尝试this answer

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      相关资源
      最近更新 更多