Fonctions sur les nœuds : number

S'applique à : SQL Server

Retourne la valeur numérique du nœud indiqué par $arg.

Syntaxe

  
fn:number() as xs:double?   
fn:number($arg as node()?) as xs:double?  

Arguments

$arg
Nœud dont vous voulez renvoyer la valeur sous forme numérique.

Notes

Si $arg n’est pas spécifié, la valeur numérique du nœud de contexte, convertie en double, est retournée. Dans SQL Server, fn :number() sans argument ne peut être utilisé que dans le contexte d’un prédicat dépendant du contexte. Autrement dit, elle ne peut être utilisée qu'à l'intérieur de crochets ([ ]). Par exemple, l’expression suivante retourne l’élément <ROOT> .

declare @x xml  
set @x='<ROOT>111</ROOT>'  
select @x.query('/ROOT[number()=111]')  

Si la valeur du nœud n’est pas une représentation lexicale valide d’un type simple numérique, telle que définie dans la partie schéma XML 2 :Datatypes, recommandation W3C, la fonction retourne une séquence vide. Les valeurs NaN ne sont pas prises en charge.

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.

R : Utilisation de la fonction XQuery number() pour récupérer la valeur numérique d'un attribut

La requête suivante récupère la valeur numérique de l'attribut taille de lot à partir du premier poste de travail du processus de fabrication du modèle de produit 7.

SELECT ProductModelID, Instructions.query('  
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;  
     for $i in (//AWMI:root//AWMI:Location)[1]  
     return   
       <Location LocationID="{ ($i/@LocationID) }"   
                   LotSizeA="{  $i/@LotSize }"  
                   LotSizeB="{  number($i/@LotSize) }"  
                   LotSizeC="{ number($i/@LotSize) + 1 }" >  
  
       </Location>  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=7  

Notez les points suivants dans la requête précédente :

  • La fonction number() n’est pas obligatoire, comme indiqué par la requête pour l’attribut LotSizeA . Il s'agit d'une fonction XPath 1.0 qui est incluse pour garantir la compatibilité ascendante.

  • XQuery pour LotSizeB spécifie la fonction de nombre et est redondante.

  • La requête pour LotSizeD illustre l’utilisation d’une valeur numérique dans une opération arithmétique.

Voici le résultat obtenu :

ProductModelID   Result  
----------------------------------------------  
7              <Location LocationID="10"   
                         LotSizeA="100"   
                         LotSizeB="100"   
                         LotSizeC="101" />  

Limites de mise en œuvre

Les limitations suivantes s'appliquent :

  • La fonction number() accepte uniquement les nœuds. Elle n'accepte pas de valeurs atomiques.

  • Lorsque les valeurs ne peuvent pas être retournées en tant que nombre, la fonction number() retourne la séquence vide au lieu de NaN.

Voir aussi

Fonctions XQuery impliquant le type de données xml