Funkce na uzlech – číslo

platí pro:SQL Server

Vrátí číselnou hodnotu uzlu, která je označena $arg.

Syntax

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

Arguments

$arg
Uzel, jehož hodnota bude vrácena jako číslo.

Remarks

Pokud $arg není specifikován, vrátí se číselná hodnota kontextového uzlu, převedená na dvojnásobek. V SQL Server lze fn:number() bez argumentu použít pouze v kontextu kontextově závislého predikátu. Konkrétně lze použít pouze uvnitř závorek ([ ]). Například následující výraz vrací prvek <ROOT> .

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

Pokud hodnota uzlu není platnou lexikální reprezentací numerického jednoduchého typu, jak je definováno v XML Schema Part 2: Datatypes, W3C Recommendation, funkce vrátí prázdnou sekvenci. NaN není podporován.

Examples

Toto téma obsahuje příklady XQuery pro instance XML uložené v různých xml sloupce typu v databázi AdventureWorks.

A. Použití funkce number() XQuery k získání číselné hodnoty atributu

Následující dotaz získává číselnou hodnotu atributu velikosti šarže z prvního místa pracovního centra ve výrobním procesu Modelu produktu 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  

Všimněte si následujících věcí z předchozího dotazu:

  • Funkce number() není nutná, jak ukazuje dotaz na atribut LotSizeA . Jedná se o funkci XPath 1.0 a je zahrnuta především z důvodů zpětné kompatibility.

  • XQuery pro LotSizeB specifikuje číselnou funkci a je redundantní.

  • Dotaz pro LotSizeD ilustruje použití číselné hodnoty v aritmetické operaci.

Toto je výsledek:

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

Omezení implementace

Toto jsou omezení:

  • Funkce number() přijímá pouze uzly. Nepřijímá atomové hodnoty.

  • Pokud nelze hodnoty vrátit jako číslo, funkce number() vrátí prázdnou posloupnost místo NaN.