【问题标题】:SQL Server: How do I check if an element attribute of an xml node contains a specific string?SQL Server:如何检查 xml 节点的元素属性是否包含特定字符串?
【发布时间】:2012-02-20 07:51:02
【问题描述】:

我有一个这样的 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-server xml xpath


    【解决方案1】:

    SQL中的xpath引擎支持contains函数,所以可以说:

    SELECT
        @MyXML.value('(/Students/Student/Node[contains(@Type,"Stream")]/@Value)[1]',
                     'varchar(100)') 
        AS ChangedValue
    

    不幸的是,显而易见的 ends-with() 是一个 xpath 2.0 函数,而 SQL 引擎不提供该函数,所以如果您想测试字符串 以结尾em> Stream 你不得不说(根据this post):

    SELECT
        @MyXML.value
       ('(/Students/Student/Node["Stream"
                    = substring(@Type, string-length(@Type)-5)]/@Value)[1]',
         'varchar(100)') 
        AS ChangedValue
    

    【讨论】:

    • 非常感谢。解决了我的问题。
    猜你喜欢
    • 2011-08-03
    • 2015-12-19
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2019-10-22
    • 2010-11-16
    相关资源
    最近更新 更多