Sql server 逗号分隔XML字段查询
我正在寻找一种解决方案,用逗号分隔符从XML字段中获取多个值 例如:我有一个表,它是一个pin和一个XML字段Sql server 逗号分隔XML字段查询,sql-server,xml,tsql,xquery,Sql Server,Xml,Tsql,Xquery,我正在寻找一种解决方案,用逗号分隔符从XML字段中获取多个值 例如:我有一个表,它是一个pin和一个XML字段 1,<item>Number One</item><item>Number Two</item><item>Number Three</item> 使用以下代码,我可以得到以下结果: 1, Number One Number Two Number Three 使用以下查询: SELECT t.pin
1,<item>Number One</item><item>Number Two</item><item>Number Three</item>
使用以下代码,我可以得到以下结果:
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
试试这个:
SELECT
t.pin,
STUFF(@xml.query('for $I in /item return concat('','', $I)').value('.', 'nvarchar(max)'), 1, 1, '') AS 'items'
FROM
table
这个方法很完美,谢谢你花时间。它还考虑了字符串的格式,这是一个非常好的操作。@GavCheal漂亮的双关语。很高兴它起作用了。别忘了在回答的问题上做标记,谢谢
-- 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 |
+----+--------------------------------------------+
SELECT
t.pin,
STUFF(@xml.query('for $I in /item return concat('','', $I)').value('.', 'nvarchar(max)'), 1, 1, '') AS 'items'
FROM
table