Funktioner på strängvärden – delsträng

Gäller för:SQL Server

Returnerar en del av värdet $sourceString, med start på positionen som anges av värdet $startingLoc, och fortsätter för antalet tecken som anges av värdet $length.

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?  

Arguments

$sourceString
Källsträng.

$startingLoc
Startpunkt i källsträngen från vilken delsträngen börjar. Om detta värde är negativt eller 0, returneras endast de tecken som är större än noll. Om den är större än längden på $sourceString returneras strängen med nolllängd.

$length
[valfritt] Antal tecken att hämta. Om det inte specificeras, returnerar den alla tecken från platsen som anges i $startingLoc fram till slutet av strängen.

Anmärkningar

Den treargumentiga versionen av funktionen returnerar de tecken i $sourceString vars position $p lyder:

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

Värdet av $length kan vara större än antalet tecken i värdet $sourceString efter startpositionen. I detta fall returnerar delsträngen tecknen upp till slutet av $sourceString.

Den första tecknet i en sträng är placerat på position 1.

Om värdet av $sourceString är den tomma sekvensen hanteras det som en sträng med nolllängd. Annars, om antingen $startingLoc eller $length är den tomma sekvensen, returneras den tomma sekvensen.

Kompletterande tecken (surrogatpar)

Beteendet hos surrogatpar i XQuery-funktioner beror på databasens kompatibilitetsnivå och i vissa fall på standardnamnrymdens URI för funktioner. För mer information, se avsnittet "XQuery Functions Are Surrogate-Aware" i ämnet Breaking Changes to Database Engine Functions in SQL Server 2016. Se även ALTER DATABASE Compatibility Level (Transact-SQL) och Collation and Unicode Support.

Implementeringsbegränsningar

SQL Server kräver att $startingLoc och $length parametrar är av typen xs:decimal istället för xs:double.

SQL Server tillåter att $startingLoc och $length är den tomma sekvensen, eftersom den tomma sekvensen är ett möjligt värde som ett resultat av dynamiska fel som mappas till ().

Examples

Detta ämne ger XQuery-exempel mot XML-instanser lagrade i olika XML-typkolumner i databasen AdventureWorks2025 .

A. Med hjälp av delsträng() XQuery-funktionen för att hämta partiella sammanfattningsbeskrivningar av produktmodellen

Frågan hämtar de första 50 tecknen i texten som beskriver produktmodellen, elementet <Summary> i dokumentet.

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;  

Observera följande från föregående fråga:

  • Sträng()-funktionen returnerar strängvärdet för elementet<Summary>. Denna funktion används eftersom elementet <Summary> innehåller både texten och delelementen (html-formateringselement), och för att du hoppar över dessa element och hämtar all text.

  • Delsträngen()-funktionen hämtar de första 50 tecknen från strängvärdet som strängen() hämtar.

Detta är ett partiellt resultat:

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

Se även

XQuery Functions mot xml-datatypen