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.