在t-sql中使用.query()来获取内部文本

Joe*_*ool 5 xml sql t-sql sql-server xpath

如何使用.query()语法t-sql来选择特定节点,但只获取内部文本而不是包含在节点标签中的内部文本?

就像我这样做的时候:

SELECT TOP 1 [XMLContent].query('/Event/Username'), * from Events
Run Code Online (Sandbox Code Playgroud)

我明白了:

<Username>BURGUNDY</Username>
Run Code Online (Sandbox Code Playgroud)

但我想要的只是BURGUNDY.很明显我可以做一些子字符串来获得它,但我希望有一个快速简便的方法来做到这一点.

jfo*_*las 8

您可以使用xquery data()函数:

[XMLContent].query('data(/Event/Username)')
Run Code Online (Sandbox Code Playgroud)

但是,这将返回XML作为类型(即使没有标记).

您也可以使用.value而不是.query:

[XMLContent].value('/Event[1]/Username[1]', 'NVARCHAR(MAX)')
Run Code Online (Sandbox Code Playgroud)


kd7*_*kd7 5

declare @xml xml;
set @xml = '<Event><Username>BURGUNDY</Username></Event>'

Select @xml.value('/Event[1]/Username[1]', 'varchar(30)');
Run Code Online (Sandbox Code Playgroud)