Funzione number (XQuery)
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 non si specifica $arg, viene restituito il valore numerico del nodo di contesto, convertito in valore double. In SQL Server, è possibile utilizzare la funzione fn:number() senza argomento solo nell'ambito 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 illustrato nella raccomandazione W3C XML Schema Part 2:Datatypes, la funzione restituisce una sequenza vuota. NaN non è supportato.
Esempi
In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks2008R2. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.
A. 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 è necessaria, come illustrato dalla query relativa all'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.
La query XQuery per LotSizeB specifica la funzione number ed è ridondante.
Nella query per LotSizeD viene illustrato l'utilizzo 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.
Se non è possibile restituire valori numerici, la funzione number() restituisce una sequenza vuota anziché NaN.