Delen via


Functies op knooppunten - getal

van toepassing op:SQL Server-

Retourneert de numerieke waarde van het knooppunt dat wordt aangegeven door $arg.

Syntaxis

  
fn:number() as xs:double?   
fn:number($arg as node()?) as xs:double?  

Argumenten

$arg
Knooppunt waarvan de waarde wordt geretourneerd als een getal.

Opmerkingen

Als $arg niet is opgegeven, wordt de numerieke waarde van het contextknooppunt, geconverteerd naar een dubbele waarde, geretourneerd. In SQL Server kan fn:number() zonder argument alleen worden gebruikt in de context van een contextafhankelijk predicaat. Het kan met name alleen tussen vierkante haken ([ ]) worden gebruikt. Met de volgende expressie wordt bijvoorbeeld het <ROOT>-element geretourneerd.

declare @x xml  
set @x='<ROOT>111</ROOT>'  
select @x.query('/ROOT[number()=111]')  

Als de waarde van het knooppunt geen geldige lexicale weergave is van een numeriek eenvoudig type, zoals gedefinieerd in XML-schema deel 2: Gegevenstypen, W3C-aanbeveling, retourneert de functie een lege reeks. NaN wordt niet ondersteund.

Voorbeelden

Dit onderwerp bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml- typekolommen in de AdventureWorks-database.

Een. De functie number() XQuery gebruiken om de numerieke waarde van een kenmerk op te halen

Met de volgende query wordt de numerieke waarde van het kenmerk lotgrootte opgehaald van de eerste werkcentrumlocatie in het productieproces van productmodel 7.

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  

Let op het volgende uit de vorige query:

  • De functie number() is niet vereist, zoals wordt weergegeven door de query voor het kenmerk LotSizeA. Dit is een XPath 1.0-functie en is voornamelijk opgenomen om achterwaartse compatibiliteitsredenen.

  • De XQuery voor LotSizeB- geeft de getalfunctie op en is redundant.

  • De query voor LotSizeD- illustreert het gebruik van een getalwaarde in een rekenkundige bewerking.

Dit is het resultaat:

ProductModelID   Result  
----------------------------------------------  
7              <Location LocationID="10"   
                         LotSizeA="100"   
                         LotSizeB="100"   
                         LotSizeC="101" />  

Implementatiebeperkingen

Dit zijn de beperkingen:

  • De functie number() accepteert alleen knooppunten. Het accepteert geen atomische waarden.

  • Als waarden niet als een getal kunnen worden geretourneerd, retourneert de functie getal() de lege reeks in plaats van NaN.

Zie ook

XQuery-functies op basis van het xml-gegevenstype