Share via


contains-Funktion (XQuery)

Gibt einen Wert vom Typ xs:boolean zurück, der angibt, ob der Wert von $arg1 einen Zeichenfolgenwert enthält, der durch $arg2 angegeben wird.

Syntax

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

Argumente

  • $arg1
    Zu testender Zeichenfolgenwert.

  • $arg2
    Abzurufende Unterzeichenfolge.

Hinweise

Wenn der Wert von $arg2 eine Zeichenfolge mit der Länge null ist, gibt die Funktion True zurück. Wenn der Wert von $arg1 eine Zeichenfolge mit der Länge null ist und der Wert von $arg2 keine Zeichenfolge mit der Länge null ist, gibt die Funktion False zurück.

Wenn der Wert von $arg1 oder $arg2 die leere Sequenz ist, wird das Argument als die Zeichenfolge mit der Länge null behandelt.

Die contains()-Funktion verwendet die Unicode-Codepunkt-Standardsortierung von XQuery für den Zeichenfolgenvergleich.

Der für $arg2 angegebene Unterzeichenfolgenwert muss kleiner oder gleich 4000 Zeichen sein. Wenn ein Wert größer als 4000 Zeichen angegeben wird, tritt eine dynamische Fehlerbedingung auf, und die contains()-Funktion gibt eine leere Sequenz statt eines booleschen Werts von True oder False zurück. SQL Server löst keine dynamischen Fehler für XQuery-Ausdrücke aus.

Für Vergleiche, bei denen nicht zwischen Groß- und Kleinschreibung unterschieden wird, kann die upper-case- oder lower-case-Funktion verwendet werden.

Beispiele

Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom Typ xml in der AdventureWorks-Datenbank gespeichert sind. Einen Überblick über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-Datenbank.

A. Verwenden der contains()-Funktion von XQuery zum Suchen nach einer bestimmten Zeichenfolge

Die folgende Abfrage sucht nach Produkten, die das Wort Aerodynamic in den Zusammenfassungsbeschreibungen enthalten. Die Abfrage gibt die ProductID und das <Summary>-Element für solche Produkte zurück.

--The product model description document uses
--namespaces. The WHERE clause uses the exit()
--method of the xml data type. Inside the exit method,
--the XQuery contains()function is used to
--determine whether the <Summary> text contains the word
--Aerodynamic. 

USE AdventureWorks
GO
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.exist('
   /pd:ProductDescription/pd:Summary//text()
    [contains(., "Aerodynamic")]') = 1

Ergebnisse

ProductModelID-Ergebnis

-------------- ---------

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">

Ein ECHTES Multisport-Fahrrad, das eine Stromlinienform und

ein revolutionäres Design bietet. Mit dem aerodynamischen Design fahren Sie wie

die Profis, und die Gangschaltung bezwingt hügelige Straßen.</p1: p>

</pd:Summary>

</Prod>