Fonctions sur des valeurs de chaîne - longueur de chaîneFunctions on String Values - string-length

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à partir de la version 2012)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retourne la longueur de la chaîne en caractères.Returns the length of the string in characters.

SyntaxeSyntax


fn:string-length() as xs:integer  
fn:string-length($arg as xs:string?) as xs:integer  

ArgumentsArguments

$arg$arg
Chaîne source dont la longueur doit être calculée.Source string whose length is to be computed.

NotesRemarks

Si la valeur de $arg est une séquence vide, un xs : Integer la valeur 0 est retournée.If the value of $arg is an empty sequence, an xs:integer value of 0 is returned.

Le comportement de paires de substitution dans les fonctions XQuery dépend du niveau de compatibilité de la base de données.The behavior of surrogate pairs in XQuery functions depends on the database compatibility level. Si le niveau de compatibilité est 110 ou supérieur, chaque paire de substitution est comptée comme un caractère unique.If the compatibility level is 110 or later, each surrogate pair is counted as a single character. Pour les premiers niveaux de compatibilité, ils sont comptés comme deux caractères.For earlier compatibility levels, they are counted as two characters. Pour plus d’informations, consultez ALTER DATABASE Compatibility Level ( Transact-SQL ) et prise en charge Unicode et du classement.For more information, see ALTER DATABASE Compatibility Level (Transact-SQL) and Collation and Unicode Support.

Si la valeur contient un caractère Unicode composé de 4 octets et représenté par deux caractères de substitution, SQL ServerSQL Server compte ces caractères de substitution séparément.If the value contains a 4-byte Unicode character that is represented by two surrogate characters, SQL ServerSQL Server will count the surrogate characters individually.

Le Length sans un paramètre peut être utilisé uniquement dans un prédicat.The string-length() without a parameter can only be used inside a predicate. Par exemple, la requête suivante renvoie l'élément <ROOT> :For example, the following query returns the <ROOT> element:

DECLARE @x xml;  
SET @x='<ROOT>Hello</ROOT>';  
SELECT @x.query('/ROOT[string-length()=5]');  

Caractères supplémentaires (paires de substitution)Supplementary Characters (Surrogate Pairs)

Le comportement de la paire de substitution dans des fonctions XQuery dépend du niveau de compatibilité de la base de données et, dans certains cas, de l'URI de l'espace de noms par défaut des fonctions.The behavior of surrogate pairs in XQuery functions depends on the database compatibility level and, in some cases, on the default namespace URI for functions. Pour plus d’informations, consultez la section « XQuery fonctions sont substitut prenant en charge » dans la rubrique modifications avec rupture des fonctionnalités du moteur de base de données dans SQL Server 2016.For more information, see the section "XQuery Functions Are Surrogate-Aware" in the topic Breaking Changes to Database Engine Features in SQL Server 2016. Consultez également ALTER DATABASE Compatibility Level ( Transact-SQL ) et prise en charge Unicode et du classement.Also see ALTER DATABASE Compatibility Level (Transact-SQL) and Collation and Unicode Support.

ExemplesExamples

Cette rubrique fournit des exemples de XQuery relatifs à des instances XML stockés dans différentes xml colonnes de type dans la base de données AdventureWorks.This topic provides XQuery examples against XML instances stored in various xml type columns in the AdventureWorks database.

A.A. Utilisation de la fonction XQuery string-length() pour extraire les produits dont la description résumée présente une certaine longueurUsing the string-length() XQuery function to retrieve products with long summary descriptions

Pour les produits dont la description résumée comprend plus de 50 caractères, la requête suivante extrait l'ID de produit, la longueur de la description résumée, ainsi que le résumé proprement dit, représenté par l'élément <Summary>.For products whose summary description is greater than 50 characters, the following query retrieves the product ID, the length of the summary description, and the summary itself, the <Summary> element.

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' as pd)  
SELECT CatalogDescription.query('  
      <Prod ProductID= "{ /pd:ProductDescription[1]/@ProductModelID }" >  
       <LongSummary SummaryLength =   
           "{string-length(string( (/pd:ProductDescription/pd:Summary)[1] )) }" >  
           { string( (/pd:ProductDescription/pd:Summary)[1] ) }  
       </LongSummary>  
      </Prod>  
 ') as Result  
FROM Production.ProductModel  
WHERE CatalogDescription.value('string-length( string( (/pd:ProductDescription/pd:Summary)[1]))', 'decimal') > 200;  

Notez les points suivants dans la requête précédente :Note the following from the previous query:

  • La condition de la clause WHERE extrait uniquement les lignes où la description résumée stockée dans le document XML comprend plus de 200 caractères.The condition in the WHERE clause retrieves only the rows where the summary description stored in the XML document is longer than 200 characters. Elle utilise le le méthode value() (type de données XML).It uses the value() method (XML data type).

  • La clause SELECT construit simplement le document XML de votre choix.The SELECT clause just constructs the XML that you want. Elle utilise le méthode query() (type de données XML) pour construire le document XML et spécifiez l’expression XQuery nécessaire pour récupérer des données à partir du document XML.It uses the query() method (XML data type) to construct the XML and specify the necessary XQuery expression to retrieve data from the XML document.

    Voici un extrait du résultat :This is a partial result:

Result  
-------------------  
<Prod ProductID="19">  
      <LongSummary SummaryLength="214">Our top-of-the-line competition   
             mountain bike. Performance-enhancing options include the  
             innovative HL Frame, super-smooth front suspension, and   
             traction for all terrain.  
      </LongSummary>  
</Prod>  
...  

B.B. Utilisation de la fonction XQuery string-length() pour extraire les produits dont la description de la garantie est courteUsing the string-length() XQuery function to retrieve products whose warranty descriptions are short

Pour les produits dont la description de la garantie comprend moins de 20 caractères, la requête suivante extrait des données XML qui indiquent l'ID de produit, la longueur, la description de la garantie et l'élément <Warranty> proprement dit.For products whose warranty descriptions are less than 20 characters long, the following query retrieves XML that includes the product ID, length, warranty description, and the <Warranty> element itself.

La garantie est l'une des caractéristiques du produit.Warranty is one of the product features. Un élément enfant <Warranty> facultatif suit l'élément <Features>.An optional <Warranty> child element follows after the <Features> element.

WITH XMLNAMESPACES (  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  

SELECT CatalogDescription.query('  
      for   $ProdDesc in /pd:ProductDescription,  
            $pf in $ProdDesc/pd:Features/wm:Warranty  
      where string-length( string(($pf/wm:Description)[1]) ) < 20  
      return   
          <Prod >  
             { $ProdDesc/@ProductModelID }  
             <ShortFeature FeatureDescLength =   
                             "{string-length( string(($pf/wm:Description)[1]) ) }" >  
                 { $pf }  
             </ShortFeature>  
          </Prod>  
     ') as Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('/pd:ProductDescription')=1;  

Notez les points suivants dans la requête précédente :Note the following from the previous query:

  • PD et wm sont les préfixes d’espace de noms utilisés dans cette requête.pd and wm are the namespace prefixes used in this query. Ils identifient les mêmes espaces de noms que ceux utilisés dans le document interrogé.They identify the same namespaces used in the document that is being queried.

  • La requête XQuery spécifie une boucle FOR imbriquée.The XQuery specifies a nested FOR loop. La boucle FOR externe est nécessaire, car vous souhaitez récupérer le ProductModelID les attributs de la <ProductDescription> élément.The outer FOR loop is required, because you want to retrieve the ProductModelID attributes of the <ProductDescription> element. La boucle FOR interne est requise car vous ne souhaitez obtenir que les produits dont la description de la garantie comprend moins de 20 caractères.The inner FOR loop is required, because you want only those products that have warranty feature descriptions that are less than 20 characters long.

    Voici le résultat partiel :This is the partial result:

Result  
-------------------------  
<Prod ProductModelID="19">  
  <ShortFeature FeatureDescLength="15">  
    <wm:Warranty   
       xmlns:wm="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
      <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>  
      <wm:Description>parts and labor</wm:Description>  
    </wm:Warranty>  
   </ShortFeature>  
</Prod>  
...  

Voir aussiSee Also

Fonctions XQuery impliquant le type de données xmlXQuery Functions against the xml Data Type