Freigeben über


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.