[英]SQL Parse xml column data
我對SQL Server的經驗很少。 這是我要完成的工作:
我的桌子上有很多行。 每行包含一個名為“ Config”的列。 存儲在“配置”列中的數據是xml
類型。 xml結構如下所示:
<root>
<path1>
<path2>
<path3>true</path3>
</path2>
</path1>
</root>
我試圖遍歷表中的每一行,並找到<path3>
的true
到false
值的百分比。
我查看了一些SQL文檔,並嘗試使用value()
函數,但是我很難從列中提取XML數據:
select Config.value('(/root/path1/path2/path3)[1]','nvarchar(max)') from [MyDB].[dbo].[MyTable]
這是我的查詢結果:
我想從表的XML“ Config”列中查詢和提取數據,並將該數據聚合到列中。
CREATE TABLE tbl (Config xml);
INSERT INTO tbl (Config)
VALUES ('<root xmlns="abc">
<path1>
<path2>
<path3>true</path3>
</path2>
</path1>
</root>') ;
然后
with xmlnamespaces (DEFAULT 'abc')
select Config.value('(/root/path1/path2/path3)[1]','nvarchar(max)') path3Txt
from tbl;
或明確的規范
with xmlnamespaces ('abc' as x)
select Config.value('(/x:root/x:path1/x:path2/x:path3)[1]','nvarchar(max)') path3Txt
from tbl;
您將需要使用CROSS APPLY。 看看這個。
的SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY(1,1) PRIMARY KEY, [Config] XML);
INSERT INTO @tbl
VALUES (N'<root>
<path1>
<path2>
<path3>true</path3>
</path2>
</path1>
</root>')
, (N'<root>
<path1>
<path2>
<path3>false</path3>
</path2>
</path1>
</root>');
-- DDL and sample data population, end
;WITH rs AS
(
SELECT ID
, col.value('(./text())[1]','VARCHAR(20)') AS Result
FROM @tbl tbl
CROSS APPLY tbl.[Config].nodes('/root/path1/path2/path3') AS tab(col)
)
SELECT * FROM rs;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.