sql-server - 逗号分隔 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
-- 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 |
+----+--------------------------------------------+
推荐阅读
- dotnetbrowser - 如何从 DotNetBrowser 中的请求访问有效负载数据
- javascript - XMLHttpRequest POST _self 使用 localStorage 和 PHP
- mysql - GROUP BY 返回多于一行 MYSQL
- c# - 多线程环境中的事件
- python - 使用 beautifulsoup 替换表格内容
- selenium - 在 selenium-cucumber-js 中如何运行无头测试
- html - 放置在链接之间时,Img 出现乱序
- reactjs - 如何使用函数在reactjs中切换相邻行(在循环中)
- ios - iOS 模拟器“此连接不是私有的”
- listview - Yii2 listview如何调整行间距