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.
Bemerkungen
Wenn $arg nicht angegeben wird, wird der numerische Wert des Kontextknotens zurückgegeben, der in ein Double konvertiert wurde. 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 Schema Part 2:Datatypes, W3C Recommendation definiert, gibt die Funktion eine leere Sequenz zurück. NaN wird nicht unterstützt.
Beispiele
In diesem Thema finden Sie XQuery-Beispiele für XML-Instanzen, die in verschiedenen Spalten des XML-Typs 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 number() -Funktion ist nicht erforderlich, wie die Abfrage für das LotSizeA-Attribut zeigt. Es handelt sich dabei um eine XPath 1.0-Funktion, die hauptsächlich aus Gründen der Abwärtskompatibilität enthalten ist.
XQuery for 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 number() -Funktion akzeptiert nur Knoten. Sie nimmt keine atomaren Werte an.
Wenn Werte nicht als Zahl zurückgegeben werden können, gibt die funktion number() anstelle von NaN die leere Sequenz zurück.