SQL Server:如何检查xml节点的元素属性是否包含特定字符串?

时间:2012-01-27 09:38:38

标签: sql-server xml xpath

我有一个像这样的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")

有可能吗?

1 个答案:

答案 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