逗号分隔XML字段查询

问题描述 投票:0回答:2

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

例如:我有一个表,该表是一个引脚和一个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-server xml tsql xquery
2个回答
0
投票

签出。

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 |
+----+--------------------------------------------+

0
投票

尝试一下:

SELECT 
    t.pin,
    STUFF(@xml.query('for $I in /item return concat('','', $I)').value('.', 'nvarchar(max)'), 1, 1, '')   AS 'items'
FROM
    table
© www.soinside.com 2019 - 2024. All rights reserved.