contains 関数 (XQuery)

$arg1 の値に、$arg2 で指定された文字列の値が含まれているかどうかを示す xs:boolean 型の値を返します。

構文

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

引数

  • $arg1
    評価対象の文字列の値。
  • $arg2
    検索するサブストリング。

解説

$arg2 の値が長さ 0 の文字列である場合、関数は True を返します。$arg1 の値が長さ 0 の文字列で、$arg2 の値が長さ 0 の文字列でない場合、関数は False を返します。

$arg1 または $arg2 の値が空のシーケンスである場合、引数は長さ 0 の文字列として扱われます。

contains() 関数では、文字列の比較に XQuery の既定の Unicode コード ポイントの照合順序が使用されます。

$arg2 に指定するサブストリングの値は、4,000 文字以下にする必要があります。指定した値が 4,000 文字を超える場合、動的なエラー状態が発生し、contains() 関数は True または False のブール値ではなく空のシーケンスを返します。SQL Server 2005 では XQuery 式に対して動的なエラーは発生しません。

このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納されている XML インスタンスに対して実行される XQuery の例を紹介します。これらの各列の概要については、「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

上記のクエリでは、次の点に注意してください。

  • 製品モデルの説明ドキュメントでは、名前空間が使用されています。そのため、XQuery プロローグ 内で、namespace キーワードにより名前空間プレフィックスが定義されています。
  • WHERE 句では、xml データ型の value() メソッドが使用されています。value メソッド内で、<Summary> テキストに Aerodynamic という単語が含まれているかどうかを判断するために、XQuery contains() 関数が使用されています。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 の参考資料の入手