Share via


Functies voor tekenreekswaarden - subtekenreeks

Van toepassing op:SQL Server

Geeft een deel van de waarde van $sourceString terug, beginnend op de positie aangegeven door de waarde van $startingLoc, en gaat door voor het aantal tekens dat wordt aangegeven door de waarde van $length.

Syntaxis

  
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?  

Arguments

$sourceString
Bronstring.

$startingLoc
Startpunt in de bronstring waar de substring begint. Als deze waarde negatief of 0 is, worden alleen die tekens op posities groter dan nul teruggegeven. Als deze groter is dan de lengte van de $sourceString, wordt de snaar van nullengte teruggegeven.

$length
[optioneel] Aantal tekens om op te halen. Als dit niet wordt gespecificeerd, retourneert het alle tekens van de locatie die in $startingLoc is gespecificeerd tot aan het einde van de tekenreeks.

Opmerkingen

De drie-argumentige versie van de functie geeft de karakters terug in $sourceString wier positie $p volgt:

fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)

De waarde van $length kan groter zijn dan het aantal tekens in de waarde van $sourceString na de startpositie. In dit geval geeft de substring de tekens terug tot het einde van $sourceString.

Het eerste teken van een string bevindt zich op positie 1.

Als de waarde van $sourceString de lege reeks is, wordt deze behandeld als de nul-lengte string. Anders, als $startingLoc of $length de lege reeks is, wordt de lege reeks teruggegeven.

Aanvullende tekens (surrogaatparen)

Het gedrag van surrogaatparen in XQuery-functies hangt af van het compatibiliteitsniveau van de database en in sommige gevallen van de standaard naamruimte-URI voor functies. Voor meer informatie, zie de sectie "XQuery Functions Are Surrogate-Aware" in het onderwerp Breaking Changes to Database Engine Features in SQL Server 2016. Zie ook ALTER DATABASE Compatibiliteitsniveau (Transact-SQL) en Collatie en Unicode Ondersteuning.

Implementatiebeperkingen

SQL Server vereist dat de parameters van de $startingLoc en $length van type xs:decimaal zijn in plaats van xs:double.

SQL Server maakt het mogelijk dat $startingLoc en $length de lege reeks zijn, omdat de lege reeks een mogelijke waarde is als gevolg van dynamische fouten die worden toegewezen aan ().

Voorbeelden

Dit onderwerp biedt XQuery-voorbeelden tegen XML-instanties die zijn opgeslagen in verschillende xml-type kolommen in de AdventureWorks2025 database.

Eén. Gebruik van de substring() XQuery-functie om gedeeltelijke samenvattende productmodelbeschrijvingen op te halen

De query haalt de eerste 50 tekens van de tekst op die het productmodel beschrijft, het <Summary> element in het document.

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;  

Let op het volgende uit de vorige query:

  • De string()- functie geeft de stringwaarde van het<Summary> element terug. Deze functie wordt gebruikt omdat het <Summary> element zowel de tekst als subelementen bevat (html-opmaakelementen), en omdat je deze elementen overslaat en alle tekst ophaalt.

  • De substring()- functie haalt de eerste 50 tekens op van de string die door de string() wordt opgehaald.

Dit is een gedeeltelijk resultaat:

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>  
...  

Zie ook

XQuery-functies op basis van het xml-gegevenstype