Funktionen für Zeichenfolgenwerte – substring
Gilt für:SQL Server
Gibt einen Teil des Werts von $sourceString zurück, beginnend an der Position, die durch den Wert von $startingLoc angegeben wird, und wird für die Anzahl der Zeichen fortgesetzt, die durch den Wert von $length angegeben werden.
Syntax
fn:substring($sourceString as xs:string?,
$startingLoc as xs:decimal?) as xs:string?
fn:substring($sourceString as xs:string?,
$startingLoc as xs:decimal?,
$length as xs:decimal?) as xs:string?
Argumente
$sourceString
Quellzeichenfolge.
$startingLoc
Ausgangspunkt in der Quellzeichenfolge, an dem die Unterzeichenfolge beginnt. Wenn dieser Wert negativ oder 0 ist, werden nur die Zeichen an Positionen größer null zurückgegeben. Wenn sie größer als die Länge des $sourceString ist, wird die Zeichenfolge der Länge Null zurückgegeben.
$length
[optional] Anzahl der abzurufenden Zeichen. Wenn nicht angegeben, werden alle Zeichen von der in $startingLoc angegebenen Position bis zum Ende der Zeichenfolge zurückgegeben.
Bemerkungen
Die Version der Funktion mit drei Argumenten gibt die Zeichen in $sourceString
zurück, deren Position $p
genügt:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
Der Wert von $length kann größer sein als die Anzahl der Zeichen im Wert von $sourceString nach der Startposition. In diesem Fall gibt die Teilzeichenfolge die Zeichen bis zum Ende von $sourceString zurück.
Das erste Zeichen einer Zeichenfolge befindet sich an Position 1.
Wenn der Wert von $sourceString die leere Sequenz ist, wird er als leere Zeichenfolge behandelt. Andernfalls wird die leere Sequenz zurückgegeben, wenn $startingLoc oder $length die leere Sequenz ist.
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 Functions Are Surrogate-Aware" im Thema Breaking Changes to Database Engine Features in SQL Server 2016. Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL) und Sortierungs- und Unicode-Unterstützung.
Implementierungseinschränkungen
SQL Server erfordert, dass die Parameter $startingLoc und $length vom Typ xs:decimal anstelle von xs:double sein müssen.
SQL Server ermöglicht es, $startingLoc und $length die leere Sequenz zu sein, da die leere Sequenz ein möglicher Wert ist, da dynamische Fehler () zugeordnet werden.
Beispiele
Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks2022
Datenbank gespeichert sind.
A. Verwenden der substring()-Funktion von XQuery zum Abrufen von Teilzusammenfassungsbeschreibungen der Produktmodelle
Die Abfrage ruft die ersten 50 Zeichen des Texts ab, der das Produktmodell beschreibt, also das <Summary
> Element im Dokument.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Prod>{ substring(string((/pd:ProductDescription/pd:Summary)[1]), 1, 50) }</Prod>
') as Result
FROM Production.ProductModel
where CatalogDescription.exist('/pd:ProductDescription') = 1;
Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:
Die string() -Funktion gibt den Zeichenfolgenwert des<
Summary
> Elements zurück. Diese Funktion wird verwendet, da das <Summary
> Element sowohl den Text als auch die Unterelemente (HTML-Formatierungselemente) enthält, und weil Sie diese Elemente überspringen und den gesamten Text abrufen.Die substring() -Funktion ruft die ersten 50 Zeichen aus dem Zeichenfolgenwert ab, der von string() abgerufen wird.
Dies ist ein Teilergebnis:
ProductModelID Result
-------------- ----------------------------------------------------
19 <Prod>Our top-of-the-line competition mountain bike.</Prod>
23 <Prod>Suitable for any type of riding, on or off-roa</Prod>
...