Condividi tramite


Funzioni su nodi - number

Si applica a:SQL Server

Restituisce il valore numerico del nodo indicato da $arg.

Sintassi

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

Argomenti

$arg
Nodo per il quale verrà restituito un valore numerico.

Osservazioni:

Se $arg non viene specificato, viene restituito il valore numerico del nodo di contesto, convertito in double. In SQL Server fn:number() senza un argomento può essere usato solo nel contesto di un predicato dipendente dal contesto. In particolare, può essere utilizzata solo tra parentesi ([ ]). Ad esempio, l'espressione seguente restituisce l'elemento <ROOT> .

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

Se il valore del nodo non è una rappresentazione lessicale valida di un tipo semplice numerico, come definito in XML Schema Part 2:Datatypes, W3C Recommendation, la funzione restituisce una sequenza vuota. NaN non è supportato.

Esempi

In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.

R. Utilizzo della funzione XQuery number() per recuperare il valore numerico di un attributo

La query seguente recupera il valore numerico dell'attributo lotsize dal primo centro di lavorazione nel processo di produzione del modello di prodotto 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  

Dalla query precedente si noti quanto segue:

  • La funzione number() non è obbligatoria, come illustrato dalla query per l'attributo LotSizeA . Si tratta infatti di una funzione XPath della versione 1.0 ed è stata inclusa principalmente per motivi di compatibilità con le versioni precedenti.

  • XQuery per LotSizeB specifica la funzione numerica ed è ridondante.

  • La query per LotSizeD illustra l'uso di un valore numerico in un'operazione aritmetica.

Risultato:

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

Limitazioni di implementazione

Limitazioni:

  • La funzione number() accetta solo nodi. Non accetta valori atomici.

  • Quando i valori non possono essere restituiti come numero, la funzione number() restituisce la sequenza vuota anziché NaN.

Vedi anche

Funzioni XQuery per il tipo di dati XML