开发者社区 问答 正文

xml列分成1行,在SQL Server中带有逗号分隔

使用Sql Server 2012

我在String中包含包含XML格式的单个字段的表,如下所示,

a

11 4 12 5 我想要这样的结果表,其中每个列都包含单独的逗号

data1|data2

11,12|4,5

展开
收起
被纵养的懒猫 2019-09-25 15:17:15 361 分享 版权
阿里云 AI 助理回答

在SQL Server 2012中,要将XML格式的字段转换为多列数据表,并且每个列包含逗号分隔的值,可以使用内置的XML处理函数来实现。以下是一个示例步骤,展示如何从你提供的XML字符串中提取数据并转换成你想要的格式:

首先,假设你的表名为 YourTable,并且包含一个名为 XmlColumn 的列,该列存储了XML数据。XML数据格式如你所示:

<a>
    <b>
        <c>11</c>
        <d>4</d>
    </b>
    <b>
        <c>12</c>
        <d>5</d>
    </b>
</a>

你可以使用下面的SQL查询来达到目的:

WITH XMLNAMESPACES(DEFAULT 'http://yournamespace.com') -- 替换为你实际的命名空间,如果有的话
SELECT 
    STUFF(
        (
            SELECT ',' + Tbl.Col.value('(c)[1]', 'VARCHAR(10)') 
            FROM XmlColumn.nodes('/a/b') AS Tbl(Col)
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''
    ) AS data1,
    STUFF(
        (
            SELECT ',' + Tbl.Col.value('(d)[1]', 'VARCHAR(10)') 
            FROM XmlColumn.nodes('/a/b') AS Tbl(Col)
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''
    ) AS data2
FROM YourTable;

这个查询做了以下几件事: 1. 使用 WITH XMLNAMESPACES 声明默认的XML命名空间,如果你的XML有特定的命名空间,请替换 'http://yournamespace.com'。 2. 利用 nodes() 方法遍历XML中的 <b> 元素。 3. 对于每一行,使用 value() 函数分别提取 <c><d> 标签内的文本。 4. 使用 STUFFFOR XML PATH('') 技巧来生成以逗号分隔的值列表,并去除第一个多余的逗号。

请根据你的实际情况调整表名、列名以及XML路径表达式。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答