number-Funktion (XQuery)
Gibt den numerischen Wert des Knotens zurück, der durch $arg angegeben wird.
Syntax
fn:number() as xs:double?
fn:number($arg as node()?) as xs:double?
Argumente
- $arg
Knoten, dessen Wert als Zahl zurückgegeben wird.
Hinweise
Wenn $arg nicht angegeben wird, wird der numerische Wert des Kontextknotens (umgewandelt in einen double-Typ) zurückgegeben. In SQL Server kann fn:number() ohne Argument nur im Kontext eines kontextabhängigen Prädikats verwendet werden. Insbesondere kann die Funktion nur innerhalb von Klammern ([ ]) verwendet werden. Der folgende Ausdruck gibt z. B. das <ROOT>-Element zurück.
declare @x xml
set @x='<ROOT>111</ROOT>'
select @x.query('/ROOT[number()=111]')
Wenn der Wert des Knotens keine gültige lexikalische Darstellung eines numerischen simple-Typs ist (wie in XML Schema Part 2:Datatypes, W3C Recommendation definiert), gibt die Funktion eine leere Sequenz zurück. NaN wird nicht unterstützt.
Beispiele
Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten des xml-Typs in der AdventureWorks-Datenbank gespeichert werden. Einen Überblick über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-Datenbank.
A. Verwenden der number()-Funktion von XQuery zum Abrufen des numerischen Werts eines Attributs
Die folgende Abfrage ruft den numerischen Wert des LotSize-Attributs aus dem ersten Arbeitsplatzstandort im Fertigungsvorgang von Produktmodell 7 ab.
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
Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:
Die number()-Funktion ist nicht erforderlich, wie durch die Abfrage für das LotSizeA-Attribut gezeigt wird. Es handelt sich dabei um eine XPath 1.0-Funktion, die hauptsächlich aus Gründen der Abwärtskompatibilität enthalten ist.
Die XQuery für LotSizeB gibt die number-Funktion an und ist redundant.
Die Abfrage für LotSizeD veranschaulicht die Verwendung eines number-Werts in einer arithmetischen Operation.
Dies ist das Ergebnis:
ProductModelID Result
----------------------------------------------
7 <Location LocationID="10"
LotSizeA="100"
LotSizeB="100"
LotSizeC="101" />
Implementierungseinschränkungen
Die folgenden Einschränkungen sind zu beachten:
Die number()-Funktion nimmt nur Knoten an. Sie nimmt keine atomaren Werte an.
Wenn Werte nicht als Zahl zurückgegeben werden können, gibt die number()-Funktion die leere Sequenz statt NaN zurück.