Dela via


Funktioner på noder – tal

gäller för:SQL Server

Returnerar det numeriska värdet för noden som anges av $arg.

Syntax

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

Argument

$arg
Nod vars värde returneras som ett tal.

Anmärkningar

Om $arg inte anges returneras kontextnodens numeriska värde, konverterat till en dubbel. I SQL Server kan fn:number() utan argument endast användas i kontexten för ett kontextberoende predikat. Mer specifikt kan den bara användas inom hakparenteser ([ ]). Följande uttryck returnerar till exempel elementet <ROOT>.

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

Om värdet för noden inte är en giltig lexikal representation av en numerisk enkel typ, enligt definitionen i XML-schemadel 2:Datatypes, W3C-rekommendationreturnerar funktionen en tom sekvens. NaN stöds inte.

Exempel

Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika XML- typkolumner i AdventureWorks-databasen.

A. Använda XQuery-funktionen number() för att hämta det numeriska värdet för ett attribut

Följande fråga hämtar det numeriska värdet för partistorleksattributet från den första arbetsställeplatsen i tillverkningsprocessen för Produktmodell 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  

Observera följande från föregående fråga:

  • Funktionen number() krävs inte, vilket visas i frågan för attributet LotSizeA. Det här är en XPath 1.0-funktion och ingår främst av bakåtkompatibilitetsskäl.

  • XQuery för LotSizeB- anger talfunktionen och är redundant.

  • Frågan för LotSizeD illustrerar användningen av ett talvärde i en aritmetikåtgärd.

Det här är resultatet:

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

Implementeringsbegränsningar

Det här är begränsningarna:

  • Funktionen number() accepterar endast noder. Den accepterar inte atomiska värden.

  • När värden inte kan returneras som ett tal returnerar funktionen number() den tomma sekvensen i stället för NaN.

Se även

XQuery Functions mot xml-datatypen