substring, fonction (XQuery)
Retourne une partie de la valeur de $sourceString, en commençant à la position indiquée par la valeur de $startingLoc, et en continuant le nombre de caractères indiqué par la valeur de $length.
Syntaxe
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?
Arguments
$sourceString
Chaîne source.$startingLoc
Point de départ dans la chaîne source à partir duquel la sous-chaîne commence. Si cette valeur est inférieure ou égale à 0, seuls les caractères dans des positions supérieures à zéro sont retournés. Si elle est supérieure à la longueur de $sourceString, la chaîne de longueur zéro est retournée.$length
[facultatif] Nombre de caractères à extraire. Si cette valeur n'est pas spécifiée, la fonction retourne tous les caractères à partir de l'emplacement spécifié dans $startingLoc jusqu'à la fin de la chaîne.
Notes
La version à trois arguments de la fonction retourne les caractères de $sourceString dont la position $p obéit à :
fn:round($startingLoc) <= $p < fn:round($startingLoc) + fn:round($length)
La valeur de $length peut être supérieure au nombre de caractères dans la valeur de $sourceString après la position de début. Dans ce cas, la sous-chaîne retourne les caractères jusqu'à la fin de $sourceString.
Le premier caractère d'une chaîne se trouve à la position 1.
Si la valeur de $sourceString est la séquence vide, elle est gérée comme chaîne de longueur zéro. Autrement, si $startingLoc ou $length est la séquence vide, celle-ci est retournée.
Exemples
Cette rubrique fournit des exemples XQuery sur des instances XML stockées dans différentes colonnes de type xml dans la base de données AdventureWorks. Pour obtenir une vue d'ensemble de chaque colonne, consultez Représentation du type de données xml dans la base de données AdventureWorks.
A. Utilisation de la fonction XQuery substring() pour extraire une synthèse partielle des descriptions de modèles de produits.
La requête extrait les 50 premiers caractères du texte qui décrit le modèle de produit, l'élément <Summary> dans le 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
Notez les éléments suivants relatifs à la requête précédente :
La fonction string() retourne la valeur de chaîne de l'élément <Summary>. Cette fonction est utilisée car l'élément <Summary> contient à la fois le texte et les sous-éléments (éléments de mise en forme html) et car vous ignorerez ces éléments et récupérerez tout le texte.
La fonction substring() extrait les 50 premiers caractères de la valeur de chaîne extraite par string().
Voici un résultat partiel :
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>
...
Limitations de l'implémentation
Vous trouverez les limitations ci-dessous :
SQL Server exige que $startingLoc et $length parameters soient de type xs:decimal plutôt que xs:double.
SQL Server autorise $startingLoc et $length à être la séquence vide car celle-ci est une valeur possible suite au mappage des erreurs dynamiques à ().
Les paires de substitution Unicode UTF-16 sont comptées comme deux caractères au lieu d'un seul.