我有一个像这样的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
我的问题是网址部分可能会发生变化,因此我希望根据某些条件(例如
)进行匹配@Type = "%Stream"
或
@Type.Contains("Stream")
有可能吗?
答案 0 :(得分:2)
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