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 xml-Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-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 AdventureWorks2008R2;
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>