Funktionen für Knoten – number
Gilt für: SQL Server
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 ist, wird der numerische Wert des Kontextknotens zurückgegeben, der in ein Double konvertiert wird. 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 einfachen Typs ist, wie in XML-Schemateil 2:Datentypen definiert, gibt die Funktion eine leere Sequenz zurück. NaN wird nicht unterstützt.
Beispiele
Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen XML-Typspalten in der AdventureWorks-Datenbank gespeichert sind.
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 Funktion number() ist nicht erforderlich, wie in der Abfrage für das LotSizeA-Attribut dargestellt. 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 Zahlenfunktion an und ist redundant.
Die Abfrage für LotSizeD veranschaulicht die Verwendung eines Zahlenwerts in einem arithmetischen Vorgang.
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 Funktion "number()" akzeptiert nur Knoten. Sie nimmt keine atomaren Werte an.
Wenn Werte nicht als Zahl zurückgegeben werden können, gibt die Funktion Number() die leere Sequenz anstelle von NaN zurück.
Weitere Informationen
XQuery Functions against the xml Data Type (XQuery-Funktionen für den xml-Datentyp)