Fonctions sur les nœuds - nombre

 

S’applique à : SQL Server

THIS TOPIC APPLIES TO: yesSQL Server (starting with 2012)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

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

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

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

Si $arg est ne 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 peut uniquement être utilisé 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 renvoie 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 correcte d’un type numérique simple, tel que défini dans XML Schema Part 2 : Datatypes, recommandation du W3C, la fonction retourne une séquence vide. Les valeurs NaN ne sont pas prises en charge.

Cette rubrique fournit des exemples de XQuery sur des instances XML stockés dans différentes xml colonnes de type dans la base de données AdventureWorks.

A. 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="http://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 :

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

  • La requête XQuery LotSizeB spécifie la fonction number 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 :

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

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

Fonctions XQuery sur le Type de données xml

Ajouts de la communauté

AJOUTER
Afficher: