首页 > 解决方案 > 逗号分隔 XML 字段查询

问题描述

我正在寻找一种解决方案,以使用逗号分隔符从 XML 字段中获取多个值。

例如:我有一个表,它是一个 pin 和一个 XML 字段。

1,<item>Number One</item><item>Number Two</item><item>Number Three</item>

我想看到的结果是:

1, Number One, Number Two, Number Three

使用以下代码,我可以获得以下结果:

1, Number One Number Two Number Three 

使用以下查询:

SELECT 
    t.pin,
    t.items.query('for $I in items return string($I)').value('.', 'nvarchar(max)')  AS 'items'
FROM
    table

由于项目描述之间的空间,我无法对结果进行“替换”。

标签: sql-serverxmltsqlxquery

解决方案


看看这个。

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT INTO @tbl (xmldata)
VALUES
(N'<item>Number One</item><item>Number Two</item><item>Number Three</item>')
, (N'<item>Number One_2</item><item>Number Two_2</item><item>Number Three_2</item>');
-- DDL and sample data population, end

DECLARE @separator CHAR(1) = ',';

SELECT ID, xmldata
    , xmldata.query('for $i in /item
        (: Node Comparison Operator - is :)
        return if ($i is (/item[last()])[1]) then string($i/text()[1])
                else concat($i, sql:variable("@separator"))')
    .value('.', 'NVARCHAR(MAX)') AS [Comma_separated_list]
FROM @tbl;

输出

+----+--------------------------------------------+
| ID |            Comma_separated_list            |
+----+--------------------------------------------+
|  1 | Number One, Number Two, Number Three       |
|  2 | Number One_2, Number Two_2, Number Three_2 |
+----+--------------------------------------------+

推荐阅读