substring-Funktion (XQuery)
Gibt einen Teil des Werts von $sourceString ab der Position zurück, die durch den Wert von $startingLoc, angegeben wird, und fährt mit der Anzahl von Zeichen fort, die durch den Wert von $length angegeben wird.
Syntax
fn:substring($sourceString as xs:string?,
$startingLoc as 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 der Wert größer als die Länge von $sourceString ist, wird die Zeichenfolge mit der Länge null zurückgegeben.$length
[optional] Anzahl der abzurufenden Zeichen. Wenn diese nicht angegeben wird, werden alle Zeichen ab der in $startingLoc angegebenen Position bis zum Ende der Zeichenfolge zurückgegeben.
Hinweise
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 darf größer als die Anzahl der Zeichen im Wert von $sourceString ab der Startposition sein. In diesem Fall gibt die Unterzeichenfolge 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 das Argument als Zeichenfolge mit der Länge null behandelt. Wenn $startingLoc oder $length die leere Sequenz ist, wird die leere Sequenz zurückgegeben.
Beispiele:
Dieses 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 finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-Datenbank.
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, 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. Die Funktion wird verwendet, weil das <Summary>-Element Text und Unterelemente (html-Formatierungselemente) enthält und weil Sie diese Elemente überspringen und den gesamten Text abrufen werden.
Die substring()-Funktion ruft die ersten 50 Zeichen aus dem von string() abgerufenen Zeichenfolgenwert ab.
Dies ist das 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>
...
Implementierungseinschränkungen
Die folgenden Einschränkungen sind zu beachten:
SQL Server verlangt, dass $startingLoc und $length parameters vom Typ xs:decimal und nicht vom Typ xs:double sind.
SQL Server lässt zu, dass $startingLoc und $length die leere Sequenz sind, weil die leere Sequenz ein möglicher Wert ist, wenn dynamische Fehler () zugeordnet werden.
Unicode UTF-16-Ersatzpaare werden als zwei Zeichen statt als ein Zeichen gezählt.