contains 函数 (XQuery)

返回 xs:boolean 类型的值,以指明 $arg1 值是否包含 $arg2 所指定的字符串值。

语法

fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?

参数

  • $arg1
    要测试的字符串值。
  • $arg2
    要查找的子字符串。

备注

如果 $arg2 值是长度为零的字符串,则函数将返回 True。如果 $arg1 值是长度为零的字符串,而 $arg2 值不是长度为零的字符串,则函数将返回 False。

如果 $arg1$arg2 的值是空序列,则该参数将被作为长度为零的字符串来处理。

contains() 函数使用 XQuery 默认的 Unicode 码位排序规则来进行字符串比较。

$arg2 指定的子字符串值必须小于或等于 4000 个字符。如果指定的值大于 4000 个字符,将出现动态错误情形,并且 contains() 函数将返回空序列(而非布尔值 True 或 False)。SQL Server 2005 不会对 XQuery 表达式生成动态错误。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅 AdventureWorks 数据库中的 xml 数据类型表示形式

A. 使用 contains() XQuery 函数搜索特定的字符串

以下查询将查找其概要说明中包含单词 Aerodynamic 的产品。此查询将返回这些产品的 ProductID 和 <Summary> 元素。

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
      <Prod>
         { /pd:ProductDescription/@ProductModelID }
         { /pd:ProductDescription/pd:Summary }
      </Prod>
 ') as Result
FROM Production.ProductModel
where CatalogDescription.value('
  contains( (/pd:ProductDescription/pd:Summary//*/text())[1], 
            "Aerodynamic")','bit')  = 1

请注意上述查询的以下方面:

  • 产品型号说明文档将使用命名空间。因此,namespace 关键字定义了 XQuery Prolog 中的命名空间前缀。
  • WHERE 子句将使用 xml 数据类型的 value() 方法。在值方法中,XQuery contains() 函数用于确定 <Summary> 文本是否包含单词 Aerodynamic。contain() 函数所返回的布尔值将被转换为 bit。然后将该值与 1 进行比较。

结果如下:

ProductModelID Result
-------------- ---------
28     <Prod ProductModelID="28">
        <pd:Summary xmlns:pd= 
          "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
         <p1:p xmlns:p1="http://www.w3.org/1999/xhtml">
           A TRUE multi-sport bike that offers streamlined riding and 
           a revolutionary design. Aerodynamic design lets you ride with 
          the pros, and the gearing will conquer hilly roads.</p1:p>
        </pd:Summary>
       </Prod>

请参阅

参考

针对 xml 数据类型的 XQuery 函数

帮助和信息

获取 SQL Server 2005 帮助