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.