我有一个像这样的 xml 文档。
<Students>
<Student>
<Node Type="http://www.something.com/xyz/10/abc/RollNumber"
Value="Original=10000;Modified=100003445" />
<Node Type="http://www.something.com/xyz/10/abc/SerialNumber"
Value="Original=10000;Modified=172777" />
<Node Type="http://www.something.com/xyz/10/abc/Stream"
Value="Original=CS;Modified=EC" />
</Student>
</Students>
要获取流的值,我可以这样写:
Select @MyXML.value('(/Students/Student/Node[@Type="http://www.something.com/xyz/10/abc/Stream"]/@Value)[1]', 'varchar(100)') AS ChangedValue
我的问题是 url 部分可能会改变,因此我想根据一些标准来匹配它,例如
@Type = "%Stream"
或
@Type.Contains("Stream")
可能吗?
最佳答案
SQL 中的 xpath 引擎支持 contains
函数,因此您可以说:
SELECT
@MyXML.value('(/Students/Student/Node[contains(@Type,"Stream")]/@Value)[1]',
'varchar(100)')
AS ChangedValue
但是不幸的是,明显的 ends-with()
是一个 xpath 2.0 函数,而 SQL 引擎不提供该功能,因此如果您想测试您必须说的以 Stream
结尾的字符串(按照 this post ):
SELECT
@MyXML.value
('(/Students/Student/Node["Stream"
= substring(@Type, string-length(@Type)-5)]/@Value)[1]',
'varchar(100)')
AS ChangedValue
关于sql-server - SQL Server : How do I check if an element attribute of an xml node contains a specific string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9031344/