Funzioni su valori stringa - substring
Si applica a: SQL Server
Restituisce parte del valore di $sourceString, a partire dalla posizione indicata dal valore di $startingLoc e continua per il numero di caratteri indicato dal valore di $length.
Sintassi
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?
Argomenti
$sourceString
Stringa di origine.
$startingLoc
Punto della stringa di origine corrispondente al punto iniziale della sottostringa. Se il valore è negativo o è uguale a 0, vengono restituiti solo i caratteri nelle posizioni maggiori di zero. Se è maggiore della lunghezza del $sourceString, viene restituita la stringa di lunghezza zero.
$length
Numero di caratteri da recuperare (facoltativo). Se non specificato, restituisce tutti i caratteri dalla posizione specificata in $startingLoc fino alla fine della stringa.
Osservazioni:
La versione della funzione con tre argomenti restituisce i caratteri di $sourceString
il cui operatore di posizione $p
è soggetto alla regola seguente:
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
Il valore di $length può essere maggiore del numero di caratteri nel valore di $sourceString dopo la posizione iniziale. In questo caso, la sottostringa restituisce i caratteri fino alla fine di $sourceString.
Il primo carattere di una stringa si trova nella posizione 1.
Se il valore di $sourceString è la sequenza vuota, viene gestito come stringa di lunghezza zero. In caso contrario, se $startingLoc o $length è la sequenza vuota, viene restituita la sequenza vuota.
Caratteri supplementari (coppie di surrogati)
Il comportamento delle coppie di surrogati nelle funzioni XQuery dipende dal livello di compatibilità del database e, in alcuni casi, dall'URI dello spazio dei nomi predefinito per le funzioni. Per altre informazioni, vedere la sezione "XQuery Functions Are Surrogate-Aware" nell'argomento Modifiche di rilievo alle funzionalità di motore di database in SQL Server 2016. Vedere anche Livello di compatibilità ALTER DATABASE (Transact-SQL) e Regole di confronto e supporto Unicode.
Limitazioni di implementazione
SQL Server richiede che i parametri $startingLoc e $length siano di tipo xs:decimal anziché xs:double.
SQL Server consente $startingLoc e $length di essere la sequenza vuota, perché la sequenza vuota è un valore possibile a causa di errori dinamici di cui è stato eseguito il mapping a ().
Esempi
In questo argomento vengono forniti esempi XQuery su istanze XML archiviate in varie colonne di tipo xml nel AdventureWorks2022
database.
R. Utilizzo della funzione XQuery substring() per recuperare le descrizioni parziali del modello del prodotto disponibili nell'elemento Summary
La query recupera i primi 50 caratteri del testo che descrive il modello di prodotto, l'elemento <Summary
> nel documento.
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;
Dalla query precedente si noti quanto segue:
La funzione string() restituisce il valore stringa dell'elemento
Summary
<>. Questa funzione viene utilizzata, perché l'elemento <Summary
> contiene sia il testo che i sottoelementi (elementi di formattazione html) e perché questi elementi verranno ignorati e recuperati tutto il testo.La funzione substring() recupera i primi 50 caratteri dal valore stringa recuperato dalla stringa().
Risultato parziale:
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>
...