Funktionen für Zeichenfolgenwerte – contains
Gilt für:SQL Server
Gibt einen Wert vom Typ xs:boolean zurück, der angibt, ob der Wert von $arg 1 einen durch $arg 2 angegebenen Zeichenfolgenwert enthält.
Syntax
fn:contains ($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean?
Argumente
$arg 1
Zu testender Zeichenfolgenwert.
$arg 2
Abzurufende Unterzeichenfolge.
Bemerkungen
Wenn der Wert von $arg 2 eine Zeichenfolge der Länge null ist, gibt die Funktion True zurück. Wenn der Wert von $arg 1 eine Zeichenfolge der Länge null ist und der Wert von $arg 2 keine Zeichenfolge der Länge null ist, gibt die Funktion False zurück.
Wenn der Wert von $arg 1 oder $arg 2 die leere Sequenz ist, wird das Argument als Zeichenfolge der Länge null behandelt.
Die contains()-Funktion verwendet die Unicode-Codepunkt-Standardsortierung von XQuery für den Zeichenfolgenvergleich.
Der für $arg 2 angegebene Teilzeichenfolgenwert muss kleiner oder gleich 4.000 Zeichen sein. Wenn der angegebene Wert größer als 4.000 Zeichen ist, tritt eine dynamische Fehlerbedingung auf, und die contains()-Funktion gibt eine leere Sequenz anstelle des booleschen Werts True oder False zurück. SQL Server löst keine dynamischen Fehler für XQuery-Ausdrücke aus.
Um Vergleiche ohne Beachtung der Groß-/Kleinschreibung zu erhalten, können die Groß - oder Kleinschreibungsfunktionen verwendet werden.
Ergänzende Zeichen (Ersatzpaare)
Das Verhalten von Ersatzzeichenpaaren in XQuery-Funktionen hängt vom Kompatibilitätsgrad der Datenbank ab und in einigen Fällen vom Standardnamespace-URI für Funktionen. Weitere Informationen finden Sie im Abschnitt "XQuery-Funktionen sind ersatzfähig" im Thema Breaking Changes to Database Engine Features in SQL Server 2016. Weitere Informationen finden Sie unter ALTER DATABASE Compatibility Level (Transact-SQL) und Sortierung und Unicode-Unterstützung.
Beispiele
Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks-Datenbank gespeichert sind.
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 AdventureWorks2022;
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 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>