Freigeben über


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 Wertes von True oder False zurück. SQL Server 2005 löst keine dynamischen Fehler für XQuery-Ausdrücke aus.

Beispiele:

Diese Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten des xml-Typs in der AdventureWorks-Datenbank gespeichert werden. Einen Überblick über diese Spalten bietet 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.

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

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • Das Produktmodell-Beschreibungsdokument verwendet Namespaces. Aus diesem Grund definiert das namespace-Schlüsselwort das Namespacepräfix in XQuery Prolog.
  • Die WHERE-Klausel verwendet die value()-Methode des xml-Datentyps. In der value-Methode wird die contains()-Funktion von XQuery zum Bestimmen verwendet, ob der <Summary>-Text das Wort Aerodynamic enthält. Der von der contains()-Funktion zurückgegebene Boolesche Wert wird in ein Bit konvertiert. Dieses Bit wird dann mit 1 verglichen.

Dies ist das Ergebnis:

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>

Siehe auch

Verweis

XQuery-Funktionen für den xml-Datentyp

Hilfe und Informationen

Informationsquellen für SQL Server 2005