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.

Weitere Informationen

XQuery-Funktionen für den xml-Datentyp